在字节中设置特定位

我试图在Java字节variables中设置位。 它确实提供了像.setBit(i)这样的propper方法。 有人知道我怎么能意识到这一点?

我可以遍历一个给定的字节:

 if( (my_byte & (1 << i)) == 0 ){ } 

但是我不能把这个位置设置为1或0,对吗?

使用按位orand运算符。 设置一下:

 my_byte = my_byte | (1 << pos); 

取消设置一下:

 my_byte = my_byte & ~(1 << pos); 

设置一下:

 myByte |= 1 << bit; 

要清除它:

 myByte &= ~(1 << bit); 

只是为了补充Jon的答案和driis的答案

切换(反转)一下

  myByte ^= 1 << bit; 

您需要的技术是隔离选定的位,并设置或清除它。 你已经有了expression式来隔离这个位,因为你正在使用它来testing它。 您可以通过对该位进行“或”操作来设置该位,也可以通过位的1的补码来逐位进行清零。

 boolean setBit; my_byte = setBit ? myByte | (1 << i) : myByte & ~(1 << i); 

请参阅为您完成工作的类java.util.BitSet。

设置: myByte.set(bit); 重置: myByte.clear(bit); 填充一个bool: myByte.set(bit, b); 为了得到bool: b = myByte.get(bit); 获取位图: byte bitMap = myByte.toByteArray()[0];