java - 如何在长的特定位置设置/取消设置?

标签 java bit-manipulation bitwise-operators

如何在 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/

相关文章:

整数上的 Java 按位 "&"

java - 在 gwt 中设置映射的所有内容时遇到一些严重问题(用 java 编程)

java - 对首选项的点击使用react

java - 未生成数据库架构 : illegalargumentexception unknown entity on Play Framework 2. 4 + JPA Hibernate + Heroku

c - 仅使用按位运算符以二进制形式执行算术运算

C# - 大整数的按位运算

java - 如何在单击 "exit"MenuItem() 时关闭窗口?

有人可以向我解释一下这个按位函数中的 putchar 行吗?

计算快速对数基数 2 上限

java - 在 Java 的 if block 中使用逻辑运算符或按位运算符有区别吗?