如何在 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
关于java - 如何在长的特定位置设置/取消设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015598/