在字节中设置特定位

时间:2011-01-12 21:00:06

标签: java byte bit-manipulation

我正在尝试在Java字节变量中设置位。它确实提供了诸如.setBit(i)之类的方法。有谁知道我怎么能意识到这一点?

我可以通过给定的字节逐位迭代:

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

}

但我无法将此位置设为1或0,可以吗?

5 个答案:

答案 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

例如,请参阅Advanced Java/Bitwise Operators

答案 1 :(得分:61)

设置位:

myByte |= 1 << bit;

清除它:

myByte &= ~(1 << bit);

答案 2 :(得分:23)

只是为了补充Jon‘s answerdriis‘ answer

要切换(反转)一点

    myByte ^= 1 << bit;

答案 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];