0

私は単純な組み合わせ部分に取り組んでおり、4 ビット SRRING で他の 2 ビットの位置を指定して 2 ビットの位置を復元する必要があることがわかりました。

たとえば、(0,1) は (2,3) に、(0,2) は (1,3) にマップされ、合計 6 つの組み合わせになります。

私の解決策は、ネストされた 4 つの三項演算子を使用してビットをテストすることです。

ab is a four bit string, with two bits set.
c = ((((ab & 1) ? (((ab & 2) ? ... ))) : 0)
abc = ab | c
recover the last bit in the same fashion from abc.

for ループを使用せずに明確にする必要があります。私のターゲット言語は C++ メタプログラミング テンプレートです。言語を明示的に指定したことは知っていますが、それでも私の意見では不可知論的です

より良い方法/より賢い方法を考えられますか? ありがとう

4

3 に答える 3

3

バイナリ 1111 で値を xor するだけです。これにより、4 つのビットが反転し、残りの 2 つが得られます。

cd = ab ^ 0xF;
于 2010-03-23T21:53:19.367 に答える
2

問題空間はかなり小さいため、LUT ベースのソリューションは高速で簡単です。

パイソン:

fourbitmap = {
  3: (2, 3),
  5: (1, 3),
  6: (0, 3),
  9: (1, 2),
  10: (0, 2),
  12: (0, 1),
}

def getother2(n):
  return fourbitmap.get(n, None)
于 2010-03-23T21:51:43.860 に答える
0

パイソン:

def unset_bits(input=0x5):
    for position in range(4):
        if not (2**position) & input:
            yield position

収量:

>>> list( unset_bits(0x1) )
[1, 2, 3]

>>> list( unset_bits(0x2) )
[0, 2, 3]

>>> list( unset_bits(0x3) )
[2, 3]
于 2010-03-23T22:01:16.923 に答える