How to set, clear and toggle a single bit in C++

In this tutorial, we will learn how to set, clear and toggle a single bit in C++. We will use bitwise operators in our program in order to do this. See more on this further in this tutorial.

C++ code to set, clear and toggle a single bit

We will discuss setting, clearing and toggling a bit in a number one by one.

Setting a bit

To set a bit, we need to use the bitwise OR operator as shown below in the example program. Suppose we have a number num. Now let’s say we need to set the nth bit in num. We can use the following expression to do this.

num | (1 << n);

<< is left shift operator and shifts all the bits of 1 to left by n number of bits. Suppose we have number 8 (1000 in binary) and we want to set the second bit. The expression (1 << 2) gives the result as 100 (in binary). When we do the OR operation between this result and 8(1000) we get the following:

1000

0100
____

1100 =12
____

12 is the required output.

See the below code.

#include <iostream>
using namespace std;

int set(int num, int n);

int main()
{
  int num = 8;
  cout << "Setting second bit in given number " << num <<"\n";
  cout << "Result = " << set(num, 2);

  return 0;
}


int set(int num, int n)
{
  return num| (1 << n);
}

Output:

Setting second bit in given number 8
Result = 12

Note that if the bit that we want to set is already set then the above code does not make any changes in the number.

Clearing a bit

To clear a bit in a given number we use bitwise AND operator as you can see in the example program. To clear nth bit in number num, we can use the following expression.

num & ~(1 << n);

Let’s say the given number is 12 and we want to clear the second bit.

We first evaluate the expression (1<<2) which gives 100. Bitwise NOT operator compliments all the bits of 100 and gives 1111 1011 (in 8 bit). On doing AND operation with 1111 1011 and 12( 0000 1100) we get the following.

1111 1011

0000 1100
_________

0000 1000 =8
_________

8 is the required result.

See the code implementation below.

#include <iostream>
using namespace std;

int clear(int num, int n);

int main()
{
  int num = 12;
  cout << "Clearing second bit in given number " << num <<"\n";
  cout << "Result = " << clear(num, 2);
  
  return 0;
}


int clear(int num, int n)
{
  return num & ~(1 << n);
}

Output:

Clearing second bit in given number 12
Result = 8

Note that if the bit that we want to clear is already clear then the above code does not make any changes in the number.

Toggling a bit

To toggle a bit we use the bitwise XOR operator. The following expression toggles the nth bit in the number num.

num ^ (1 << n);

Say, we want to toggle the zeroth bit in 7.

First we evaluate (1 << 0) which gives the result 0000 0001. Now we XOR this result with 7. We get the following.

0000 0111

0000 0001
_________

result =  0000 0110  = 6
_________

6 is the requierd output.

See the code implementation below.

#include <iostream>
using namespace std;

int toggle(int num, int n);

int main()
{
  int num = 7;
  cout << "Toggling zeroth bit in given number " << num <<"\n";
  cout << "Result = " << toggle(num, 0);
  
}


int toggle(int num, int n)
{
  return num ^ (1 << n);
}

Output:

Toggling zeroth bit in given number 7
Result = 6

Thank you.

Also, read: C++ program to find the position of rightmost unset bit of a number

Leave a Reply

Your email address will not be published. Required fields are marked *