以字节为单位设置特定位

我试图在 Java 字节变量中设置位。它确实提供了像 .setBit(i)这样合适的方法。有人知道我是怎么做到的吗?

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

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


}

但是我不能将这个位置设置为1或0,对吗?

94038 次浏览

To set a bit:

myByte |= 1 << bit;

To clear it:

myByte &= ~(1 << bit);

The technique you need is to isolate the chosen bit and either set or clear it. You already have the expression to isolate the bit since you're using that to test it above. You can set the bit by ORing it in, or clear the bit by bitwise AND with the 1's complement of the bit.

boolean setBit;
my_byte = setBit
? myByte | (1 << i)
: myByte & ~(1 << i);

Use the bitwise OR (|) and AND (&) operators. To set a bit, namely turn the bit at pos to 1:

my_byte = my_byte | (1 << pos);   // longer version, or
my_byte |= 1 << pos;              // shorthand

To un-set a bit, or turn it to 0:

my_byte = my_byte & ~(1 << pos);  // longer version, or
my_byte &= ~(1 << pos);           // shorthand

For examples, see Advanced Java/Bitwise Operators

Just to complement Jon‘s answer and driis‘ answer

To toggle (invert) a bit

    myByte ^= 1 << bit;

Please see the class java.util.BitSet that do the job for you.

To set : myByte.set(bit); To reset : myByte.clear(bit); To fill with a bool : myByte.set(bit, b); To get the bool : b = myByte.get(bit); Get the bitmap : byte bitMap = myByte.toByteArray()[0];