In this blog post, I will teach you how to write C/C++ program to toggle a particular bit in a number. After reading this detail guide post I believe you able to write an efficient program to toggle bit in a number.
Consider the below examples,
Example-1:
Input : n = 5 Here's a simple ASCII representation of 5 (an 8-bit integer): 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | (Example bit values) +---+---+---+---+---+---+---+---+ ^ | Want to toggle this Bit (3rd bit) (After toggling bit) Output: 13 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | (Example bit values) +---+---+---+---+---+---+---+---+ ^ | You can see bit has been toggled.
Example-2:
Input : n = 13 Here's a simple ASCII representation of 13 (an 8-bit integer): 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | (Example bit values) +---+---+---+---+---+---+---+---+ ^ | Want to toggle this Bit (2nd bit) (After toggling bit) Output: 9 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | (Example bit values) +---+---+---+---+---+---+---+---+ ^ | You can see bit has been toggled.
Let’s see the problem statements for this question.
Problem Statement:
Given a number ‘n’, the task is to clear the d-th bit of this number n. If dth bit is 0, then set it to 1 and if it is 1 then set it to 0. Note that d = 0
means the rightmost bit of ‘n’.
Disclaimer: Try to solve the problem yourself first otherwise it would be not worth solving this problem.
1. Using Bitwise Ex-OR (^) with a Bit Mask:
With the help of Bitwise EX-OR (^) and a Mask you can easily toggle the bits of a given number. In this approach we use a bit mask to toggle the bit at the specified position.
Using the expression (1 << d
), you can create a mask. This mask has only a set bit which you want to check.
After creating the mask, you need to perform the bitwise EX_OR between given number ‘n’ and the mask. Now dth bit of given number ‘n’ is toggle.
Let’s take an example to understand the above steps, suppose n =5.
Now if you want to toggle its 3rd bit (bit-position start from the 0), so here mask would be (1<<3).
Mask: (1 << 3) 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | (Example bit values) +---+---+---+---+---+---+---+---+
Now EX-Oring this mask with original number ‘n’.
Original number n: 5 00000101 (5 in binary) ^ Mask: 00001000 Result: = 00001101
As you know XOR of unset (0) and set bit (1) results in a set bit and XOR of a set and set bit results in an unset bit. Hence performing bitwise XOR of any bit with a set bit results in toggle of that bit, i.e.
That means, 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0
Now let see few programming examples for the better understanding.
C program to toggle a particular bit in a number:
/* C program to toggle a particular bit in a number */ #include <stdio.h> //If d valid, then returns a number // that has all bits same as n // except its d'th bit which is toggle. unsigned int toggleDthBits(unsigned int n, int d) { unsigned int tmpN = n ; //d must be greater than 0 if(d > 0) { tmpN = (n ^ (1 << d)); } else { printf("Enter valid value of position\n"); } return tmpN; } int main() { int n = 5; int d = 3; const unsigned int v = toggleDthBits(n, d); printf("v = %u", v); return 0; }
C++ program to toggle a particular bit in a number:
/* C++ program to toggle a particular bit in a number */ #include <iostream> //If d valid, then returns a number // that has all bits same as n // except its d'th bit which is toggle. unsigned int toggleDthBits(unsigned int n, int d) { unsigned int tmpN = n ; //d must be greater than 0 if(d > 0) { //Create MASK const unsigned int MASK = (1 << d); tmpN = (n ^ MASK); } else { std::cout<<"Enter valid value of position"<<std::endl; } return tmpN; } int main() { int n = 5; int d = 3; const unsigned int v = toggleDthBits(n, d); std::cout<<"v = "<< v<<std::endl; return 0; }
Recommended Post
- How to Set a Particular Bit in a number.
- turn off a particular bit.
- Count Set bits in an Integer.
- Turn off the rightmost set bit.
- Rotate bits of a number.
- Macros for Bit Manipulation in C/C++.
- 5 Ways to Check if Two Integers have Opposite Signs.
- Operator Precedence And Associativity In C.
- Operators in C language