Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I check my byte flag, verifying that a specific bit is at 1 or 0?

I use a byte to store some flag like 10101010, and I would like to know how to verify that a specific bit is at 1 or 0.

like image 778
Pokus Avatar asked Sep 02 '25 15:09

Pokus


1 Answers

Here's a function that can be used to test any bit:

bool is_bit_set(unsigned value, unsigned bitindex)
{
    return (value & (1 << bitindex)) != 0;
}

Explanation:

The left shift operator << creates a bitmask. To illustrate:

  • (1 << 0) equals 00000001
  • (1 << 1) equals 00000010
  • (1 << 3) equals 00001000

So a shift of 0 tests the rightmost bit. A shift of 31 would be the leftmost bit of a 32-bit value.

The bitwise-and operator (&) gives a result where all the bits that are 1 on both sides are set. Examples:

  • 1111 & 0001 equals 0001
  • 1111 & 0010 equals 0010
  • 0000 & 0001 equals 0000.

So, the expression:

(value & (1 << bitindex))

will return the bitmask if the associated bit (bitindex) contains a 1 in that position, or else it will return 0 (meaning it does not contain a 1 at the assoicated bitindex).

To simplify, the expression tests if the result is greater than zero.

  • If Result > 0 returns true, meaning the byte has a 1 in the tested bitindex position.
  • All else returns false meaning the result was zero, which means there's a 0 in tested bitindex position.

Note the != 0 is not required in the statement since it's a bool, but I like to make it explicit.

like image 83
2 revs Avatar answered Sep 05 '25 04:09

2 revs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!