Javaでlongの特定の位置にビットを設定/設定解除する方法は?
例えば、
long l = 0b001100L ; // bit representation
位置2にビットを設定し、位置3にビットを設定解除したいので、対応するlongは、
long l = 0b001010L ; // bit representation
誰かが私にそれを行う方法を手伝ってくれる?
ビットを設定するには、以下を使用します。
x |= 0b1; // set LSB bit
x |= 0b10; // set 2nd bit from LSB
ビットを消去するには:
x &= ~0b1; // unset LSB bit (if set)
x &= ~0b10; // unset 2nd bit from LSB
ビット使用を切り替えるには:
x ^= 0b1;
0b?を使用していることに注意してください。次のような整数も使用できます。
x |= 4; // sets 3rd bit
x |= 0x4; // sets 3rd bit
x |= 0x10; // sets 9th bit
ただし、どのビットが変更されているかを知るのが難しくなります。
バイナリを使用すると、どのビットが設定/消去/トグルされるかを確認できます。
ビットで動的に設定するには、以下を使用します。
x |= (1 << y); // set the yth bit from the LSB
(1 << y)
は... 001のy桁を左にシフトするため、設定したビットをy桁移動できます。
一度に複数のビットを設定することもできます:
x |= (1 << y) | (1 << z); // set the yth and zth bit from the LSB
または設定を解除するには:
x &= ~((1 << y) | (1 << z)); // unset yth and zth bit
または切り替えるには:
x ^= (1 << y) | (1 << z); // toggle yth and zth bit
最下位ビット(lsb)は通常ビット0と呼ばれるため、「位置2」は実際には「ビット1」です。
long x = 0b001100; // x now = 0b001100
x |= (1<<1); // x now = 0b001110 (bit 1 set)
x &= ~(1<<2); // x now = 0b001010 (bit 2 cleared)
私は BigInteger を選択します...
class Test {
public static void main(String[] args) throws Exception {
Long value = 12L;
BigInteger b = new BigInteger(String.valueOf(value));
System.out.println(b.toString(2) + " " + value);
b = b.setBit(1);
b = b.clearBit(2);
value = Long.valueOf(b.toString());
System.out.println(b.toString(2) + " " + value);
}
}
そしてここに出力があります:
1100 12
1010 10