In this blog post, I will teach you to how to write C/C++ program to check whether the bit at given position is set or unset. After reading this detail guide post I believe you able to write an efficient program to check whether the bit at given position is set or not.
Consider the below examples,
Example-1:
Input : n = 5 //number : d = 2 //position want to check 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 check bit wether set or unset
Output: Bit is set
Input : n = 9 //number : d = 1 //position want to check Here's a simple ASCII representation of 9 (an 8-bit integer): 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | (Example bit values) +---+---+---+---+---+---+---+---+ ^ | Want to check bit wether set or unset
Output: Bit is unset
Let’s see the problem statements for this question.
Problem Statement:
Given two positive number ‘n‘ and ‘d‘. You need to check whether the bit at position d from the right in the binary representation of n is set (‘1’) or unset (‘0’). That means you need check whether dth bit in ‘n’ is set or unset. 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 And (&) with a Bit Mask:
Using the Bitwise And Operator (&
) with a Mask you can easily check whether the bit at given position is set or unset.
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 AND between given number ‘n’ and the mask. Now you know whether dth bit of given number ‘n’ is set or unset.
Let’s take an example to understand the above steps, suppose n =5.
Now if you want to check its 2nd bit (bit-position start from the 0), so here mask would be (1<<2).
Mask: (1 << 2) 7 6 5 4 3 2 1 0 (Bit position) +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | (Example bit values) +---+---+---+---+---+---+---+---+
Now ANDing this mask with original number ‘n’.
Original number n: 5 00000101 (5 in binary) & Mask: 00000100 Result: = Non-Zero result, so Bit is set
C Program to check whether the bit at given position is set or unset:
/* C Program to check whether the bit at given position is set or unset: */ #include <stdio.h> //If d valid,function to check whether the bit // at given position is set or unset int checkDthBits(unsigned int n, int d) { unsigned int MASK = 0; int ret = -1; //d must be greater than 0 if(d > 0) { //Create MASK MASK = (1 << d); // if it results to '1' then bit is set, // else it results to '0' bit is unset ret = (n & MASK)? 1 : 0; } return ret; } int main() { int n = 5; int d = 2; int v = checkDthBits(n, d); switch(v) { case 0: printf("Bit is Unset"); break; case 1: printf("Bit is Set"); break; default: printf("Enter valid value of position\n"); break; } return 0; }
Output: Bit is Set
C++ Program to check whether the bit at given position is set or unset:
/* C++ Program to check whether the bit at given position is set or unset: */ #include <iostream> #include <cassert> // Use (void) to silence unused warnings. #define assertm(exp, msg) assert(((void)msg, exp)) //If d valid,function to check whether the bit // at given position is set or unset bool checkDthBits(unsigned int n, int d) { //d must be greater than 0 assert((void("Enter valid value of position"), d>0)); //Create MASK const unsigned int MASK = (1 << d); // if it results to '1' then bit is set, // else it results to '0' bit is unset const bool isBitSet = (n & MASK)? true : false; return isBitSet; } int main() { int n = 5; int d = 2; const bool hasDthBitSet = checkDthBits(n, d); if(hasDthBitSet) { std::cout<<"Bit is Set"<<std::endl; } else { std::cout << "Bit is Unset"<<std::endl; } return 0; }
Output: Bit is Set
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