Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Add information about assignment operators

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;

Note: Using the |= assignment operator

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

is essentially the same as doing

Code Block
languagecpp
themeConfluence
value = value | (1 << x);

Example

Suppose we have the following value

...

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

Note: Using the &= assignment operator

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

is essentially the same as doing

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

Example

Suppose we have the following value 

...

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;

Note: Using the ^= assignment operator

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

is essentially the same as doing

Code Block
languagecpp
themeConfluence
value = value ^ (1 << x);

Example

Suppose we have the following value

...

Code Block
languagecpp
themeConfluence
0b00000000 ^ 0b00000010 = 0b00000010

Checking a Bit

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;

Example

Suppose we have the following value

...

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) = 0b000000010b00000101

Then, the AND operator is applied

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

...