wishi
wishi

Reputation: 7387

Set specific bit in byte

I'm trying to set bits in Java byte variable. It does provide propper methods like .setBit(i). Does anybody know how I can realize this?

I can iterate bit-wise through a given byte:

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

}

However I cannot set this position to 1 or 0, can I?

Upvotes: 87

Views: 103352

Answers (5)

driis
driis

Reputation: 164281

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

Upvotes: 161

sebyku
sebyku

Reputation: 149

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

Upvotes: 9

user85421
user85421

Reputation: 29680

Just to complement Jon‘s answer and driis‘ answer

To toggle (invert) a bit

    myByte ^= 1 << bit;

Upvotes: 30

Jeffrey Hantin
Jeffrey Hantin

Reputation: 36494

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);

Upvotes: 11

Jon Skeet
Jon Skeet

Reputation: 1499860

To set a bit:

myByte |= 1 << bit;

To clear it:

myByte &= ~(1 << bit);

Upvotes: 73

Related Questions