int a = 2;
a = (a&-a);
では、このブロックの「&」の目的は何ですか?
結果は「2」
それがビットごとの「and」演算子です。より多くのスペースでより明確になる可能性があります
a = a & -a;
あるいは
a = a bitand -a;
これは、ビットごとの and 演算子です。http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2Bをご覧ください。
の組み合わせをa & -a
使用して、設定されている最下位ビットを見つけることができます。例:
12 = 00001100
-12 = 11110100
--------------
12 & -12 = 00000100
はビット単位のand ですが、完全なステートメントで行うことは、数値&
の最初のものを除外することです。1
a 11010
~a 00101
-a 00110
a&-a 00010
これはビット単位and
であり、基本的には 2 つの変数を取り、ビットごとに、両方の数値が1
その位置に a を持っている場合にのみ 1 になります。
そうa
です
11101010
-a
おそらく2の賛辞で表されるよりも
00010110
あなたと彼らが一緒になれば
11101010
00010110
---------------
00000010