我正在尝试在Java字节变量中设置位。它确实提供了诸如.setBit(i)
之类的方法。有谁知道我怎么能意识到这一点?
我可以通过给定的字节逐位迭代:
if( (my_byte & (1 << i)) == 0 ){
}
但我无法将此位置设为1或0,可以吗?
答案 0 :(得分:127)
使用按位 OR (|
)和 AND (&
)运算符。设置一个位,即将pos
的位转换为1
:
my_byte = my_byte | (1 << pos); // longer version, or
my_byte |= 1 << bit; // shorthand
取消设置,或将其转为0
:
my_byte = my_byte & ~(1 << pos); // longer version, or
my_byte &= ~(1 << bit); // shorthand
答案 1 :(得分:61)
设置位:
myByte |= 1 << bit;
清除它:
myByte &= ~(1 << bit);
答案 2 :(得分:23)
答案 3 :(得分:10)
您需要的技术是隔离所选位并设置或清除它。您已经有表达式来隔离该位,因为您正在使用它来测试它。您可以通过对其进行“或”来设置该位,或者通过按位AND将该位与该位的1位补码清除。
boolean setBit;
my_byte = setBit
? myByte | (1 << i)
: myByte & ~(1 << i);
答案 4 :(得分:7)
请参阅为您完成工作的java.util.BitSet类。
设置:myByte.set(bit);
要重置:myByte.clear(bit);
填写一个布尔:myByte.set(bit, b);
为了得到布尔:b = myByte.get(bit);
获取位图:byte bitMap = myByte.toByteArray()[0];