Home Bitwise nuggets: invert the n least significant bits
Post
Cancel

Bitwise nuggets: invert the n least significant bits

Suppose we want to invert the n least significant bits in a number. For example:

1
2
3
2019 = 11111100011
              ||||
2028 = 11111101100

If we invert the least significant 4 bits in the number 2019, we obtain 2028.

When we hear invert, we automatically think of XOR:

  • 0 XOR 0 = 0
  • 0 XOR 1 = 1
  • 1 XOR 0 = 1
  • 1 XOR 1 = 0

We therefore need to XOR the input number with a mask of n bits that are all 1…1. To obtain this mask, we can left-shift 1 for n positions, then we subtract 1. Following our previous example:

1
2
3
4
2019          : 11111100011
mask = 1 << 4 :       10000
mask -= 1     :       01111
2019 ^ mask   : 11111101100 = 2028

Here is how this operation may be implemented in C:

1
2
3
4
5
6
// Inverts the `n_bits` least significant bits in `number`
// and returns the resulting number.
int invert_n_lsb(int number, int n_bits)
{
    return number ^ ((1 << n_bits) - 1);
}

Want to see more bitwise logic? There’s a whole repository on my GitHub on bit fiddling.

This post is licensed under CC BY 4.0 by the author.

Bitwise nuggets: convert an integer to a binary string

Bitwise nuggets: count total bits

Comments powered by Disqus.