我试图在Java字节变量中设置位。它确实提供了像.setBit(i)
这样的propper方法。有人知道我怎么能意识到这一点?在字节中设置特定位
我可以通过一个给定的字节迭代逐位:
if((my_byte & (1 << i)) == 0){
}
但是我不能设置该位置为1或0,可以吗?
我试图在Java字节变量中设置位。它确实提供了像.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);
你是什么意思,这将“设置”有点?假设你试图访问第0位,myByte包含11101101.这是什么意思?我如何控制设定的价值? – Michael 2016-03-06 05:08:40
@迈克尔:设置一点意味着使它1.清除一点意味着使它为0. – 2016-03-06 08:50:00
你需要的技术是隔离的选择位和设置或清除。你已经有了表达式来隔离这个位,因为你正在使用它来测试它。您可以通过对该位进行或运算来设置该位,也可以通过位的1的补码将该位与位进行清零。
boolean setBit;
my_byte = setBit
? myByte | (1 << i)
: myByte & ~(1 << i);
这比两个单独的操作更清洁... – ernesto 2015-03-17 16:46:14
请参阅为您完成工作的类java.util.BitSet。
设置:myByte.set(bit);
要重置:myByte.clear(bit);
要与布尔填写:myByte.set(bit, b);
要得到布尔:b = myByte.get(bit);
获取位图:byte bitMap = myByte.toByteArray()[0];
另请参见异或运算符 - 它是该武器库中的第三个强大工具(请参阅维基百科关于掩蔽的文章)。 – Hardryv 2012-03-29 17:35:58