Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Formatting

Understanding these three operations will make your life much easier.

Setting a Bit

The bitwise OR operator is used to set a bit. The following code snippet sets bit x.

Code Block
languagecpp
themeConfluence
extern uint8_t value;
value |= 1 << x;

...

Code Block
languagecpp
themeConfluence
value |= 1 << 0;

which results in

Code Block
languagecpp
themeConfluence
0b00000100 | 0b00000001 = 0b00000101

Clearing a Bit

The bitwise AND operator can be used to clear a bit. The following code snippet clears bit x:

Code Block
languagecpp
themeConfluence
extern uint8_t value;
value &= ~(1 << x);

...

Code Block
languagecpp
themeConfluence
~

operator is the NOT operator, which flips all the set and unset bits, such that any set bits will be unset, and vice versa.

So every other bit is set, except for the desired bit at position x.

Code Block
languagecpp
themeConfluence
~(1 << 1) = 0b11111101

Now, when we AND it to the value, what happens is any bits that are both set will remain set, and any bits that weren't set will remain unset. In addition, for bit x, if it was originally set, it will be ANDed with 0 (and if it wasn't set, it remains unset).

Code Block
languagecpp
themeConfluence
0b00000111 & 0b11111101 = 0b00000101

Toggling a Bit

The XOR operator allows you to toggle a bit. The following code snippet toggles bit x.

Code Block
languagecpp
themeConfluence
extern uint8_t value;
value ^= 1 << x;

...

To check a bit, you can combine the right shift and AND operators. The following code snippet checks bit x.

Code Block
languagecpp
themeConfluence
extern uint8_t value;
bit = (value >> x) & 1;

...

Code Block
languagecpp
themeConfluence
bit = (value >> 2) & 1;

Essentially, we've first shifted the value x places to the right

Code Block
languagecpp
themeConfluence
(0b00010111 >> 2) = 0b00000001

Then, the AND operator is applied

Code Block
languagecpp
themeConfluence
0b00000101 & 0b00000001 = 0b00000001

...