wis*_*shi 78 java byte bit-manipulation
我正在尝试在Java字节变量中设置位.它确实提供了类似的方法.setBit(i).有谁知道我怎么能意识到这一点?
我可以通过给定的字节逐位迭代:
if( (my_byte & (1 << i)) == 0 ){
}
Run Code Online (Sandbox Code Playgroud)
但是我不能把这个位置设置为1或0,可以吗?
dri*_*iis 133
使用按位OR(|)和AND(&)运算符.设置一个位,即将位pos转到1:
my_byte = my_byte | (1 << pos); // longer version, or
my_byte |= 1 << bit; // shorthand
Run Code Online (Sandbox Code Playgroud)
要取消设置,或将其转为0:
my_byte = my_byte & ~(1 << pos); // longer version, or
my_byte &= ~(1 << bit); // shorthand
Run Code Online (Sandbox Code Playgroud)
有关示例,请参阅高级Java /按位运算符
Jon*_*eet 66
设置一下:
myByte |= 1 << bit;
Run Code Online (Sandbox Code Playgroud)
清除它:
myByte &= ~(1 << bit);
Run Code Online (Sandbox Code Playgroud)
Jef*_*tin 10
您需要的技术是隔离所选位并设置或清除它.您已经有表达式来隔离该位,因为您正在使用它来测试它.您可以通过对其进行"或"来设置该位,或者通过按位AND将该位与该位的1位补码清零.
boolean setBit;
my_byte = setBit
? myByte | (1 << i)
: myByte & ~(1 << i);
Run Code Online (Sandbox Code Playgroud)
小智 7
请参阅为您完成工作的类java.util.BitSet.
设置:myByte.set(bit);
要重置:myByte.clear(bit);
要填充bool:myByte.set(bit, b);
要获得bool:b = myByte.get(bit);
获取位图:byte bitMap = myByte.toByteArray()[0];