在字节中设置特定位
我试图在Java字节variables中设置位。 它确实提供了像.setBit(i)
这样的propper方法。 有人知道我怎么能意识到这一点?
我可以遍历一个给定的字节:
if( (my_byte & (1 << i)) == 0 ){ }
但是我不能把这个位置设置为1或0,对吗?
使用按位or
和and
运算符。 设置一下:
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];