整数があり、その中の 1 ビットを 0 から 1 または 1 から 0 に切り替えたいのですが、その状態がわかりません。1つのステートメントでそれを行うにはどうすればよいですか?
- 使用して
& | ~ ^
- 避ける
if else
(xor 演算子を追加)
整数があり、その中の 1 ビットを 0 から 1 または 1 から 0 に切り替えたいのですが、その状態がわかりません。1つのステートメントでそれを行うにはどうすればよいですか?
& | ~ ^
if else
(xor 演算子を追加)
これは一般的な操作であり、利用可能な十分な手順があります。たとえば、こちら。
ちょっと設定
bit_fld |= (1 << n)
少しクリア
bit_fld &= ~(1 << n)
少し切り替えます
bit_fld ^= (1 << n)
ちょっとテスト
bit_fld & (1 << n)
特定のビットをトグルするだけの場合は、XOR ( ^
) 操作を使用します。XOR 真理値表を調べて答えを見つけてください。
ビットを設定するには ビットごとの OR 演算子 (|) を使用してビットを設定します。
number |= 1 << x;
これにより、ビット x が設定されます。
ビットをクリアするには、ビットごとの AND 演算子 (&) を使用してビットをクリアします。
number &= ~(1 << x);
これにより、ビット x がクリアされます。ビット単位の NOT 演算子 (~) を使用してビット文字列を反転し、AND する必要があります。
少しトグル
The XOR operator (^) can be used to toggle a bit.
数 ^= 1 << x;
ビットを反転するには、反転するビットが設定された別の数値で入力数値を XOR することができます。Java ベースの例:
int a = 0b1001;
System.out.println(Integer.toBinaryString(a));
a = a ^ 0b0100; // flip third LSB
System.out.println(Integer.toBinaryString(a));
a = a ^ 0b0100; // flip it back
System.out.println(Integer.toBinaryString(a));
XOR は、あなたが言及した許可された演算子の 1 つではありませんが、それらに関して定義することができます (例) :
int xor(int p, int q) {
return (p & ~q) | (~p & q);
}
(必要に応じてこの式をインライン化します。)