2

2つの数値のXORを表す変数があります。例:int xor = 7 ^ 2;
コメントによると、XORで設定されている右端のビットを見つけるコードを調べています。

int rightBitSet = xor & ~(xor - 1);

このコードがどのように機能するかを正確に追跡することはできません。つまり、実際に(バイナリで)つまり17^2に設定されます(実際には右端のビットが設定され ます)。セットする)。 コードのロジックは、構成する数値の中で異なるビットを表す数値を見つけることです。コメントは、右端のビットセットを見つけることを示していますが、コードは1つの異なるビットを持つビットパターンを見つけるようです。どこでも。 私は正しいですか?コードがどのように機能するかもわかりません。数と数の間に何らかの関係があるようですrightBitSet0001
xor7^3rightBitSet01004xor
xor
XX-1そのバイナリ表現で?
この関係は何ですか?

4

1 に答える 1

3

2進数から1を引くと、その中の最下位の1が0に置き換えられ、下位のすべてのビットが1に設定されます。次に例を示します。

5 - 1 = 101 - 1 = 100 = 4
4 - 1 = 100 - 1 = 011 = 3
6 - 1 = 110 - 1 = 101 = 5

したがって、評価では、x & ~(x - 1)上記xの最下位1~(x - 1)は、と同じセットビットを持ちます。~xしたがって、上記xの最下位1x & ~(x-1)は、1ビットを持ちません。定義上、x最下位1に1ビットがあり、上記で見たよう~(x - 1)に、これも同様ですが、~(x - 1)そのポイントより下に0があります。したがって、x & ~(x - 1)の最下位ビットである1ビットのみが含まれxます。

于 2012-08-04T08:39:52.833 に答える