以字节更改位值

Dam*_*mir 10 java

我在字段类型字节中有一些数据(我在字节中保存了8个输入,每个位都是一个输入).如何仅更改该字段中的一个输入(字节),但不丢失其他信息(例如,将第七位更改为一,或将第六位更改为零)?

dka*_*arp 25

要将第七位设置为1:

b = (byte) (b | (1 << 6));
Run Code Online (Sandbox Code Playgroud)

要将第六位设置为零:

b = (byte) (b & ~(1 << 5));
Run Code Online (Sandbox Code Playgroud)

(位位置实际上是基于0的,所以这就是"第七位"映射到1 << 6而不是1 << 7.)


sta*_*lue 13

声明b为原始类型byte:

byte b = ...;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用组合二进制操作和赋值的复合赋值运算符(这不起作用Byte):

b |= (1 << bitIndex); // set a bit to 1
b &= ~(1 << bitIndex); // set a bit to 0
Run Code Online (Sandbox Code Playgroud)

如果没有赋值运算符,则需要强制转换,因为|&运算的结果是int:

b = (byte) (b | (1 << bitIndex));
b = (byte) (b & ~(1 << bitIndex));
Run Code Online (Sandbox Code Playgroud)

强制转换隐含在复合赋值运算符中,请参阅Java语言规范.