Most programming languages like C, C++, Java, Python offer various bit level manipulation operators (bitwise operators) and many puzzling questions can be formed based upon these operators. I am sharing some of such bit manipulation questions here. Attempting challenging programs like these is a great way to learn about the bit level representation of numbers and the various bitwise operators (&, |, ^, ~, >>, <<).
These questions require you to implement a piece of code with only a limited set of operators.
Write a function to perform bitwise AND using ~ and | operators only.
Write a function to perform bitwise XOR using ~ and & operators only.
Write a function to give sign info about a number x without using conditional statements, >, <, == and - operators. Return 1 if x > 0, -1 if x < 0 and 0 if x = 0.
Write a function to compare 2 numbers without using conditional statements, >, <, == and - operators. Return 1 if a > b, -1 if a < b and 0 if a = b.
Here, negative of b is obtained by taking its 2's complement using biwsise operators. This is then added to a and the sign of the result is determined. See above question for sign() function.
Write a function to return logical not of a given number x (i.e. !x), without using ! operator and conditional statements.
Write a function to implement conditional operator ?: using bitwise operators only.
Write a function to print binary representation of a given number.
Write a function to perform bitwise AND using ~ and | operators only.
int bitAnd(int a, int b)
{
return ~(~a | ~b);
}
Write a function to perform bitwise XOR using ~ and & operators only.
int bitXor(int a, int b)
{
return ~(~(~a & b) & ~(a & ~b));
}
Write a function to give sign info about a number x without using conditional statements, >, <, == and - operators. Return 1 if x > 0, -1 if x < 0 and 0 if x = 0.
int sign(int x)
{
return (x>>31) | (!!x);
}
Write a function to compare 2 numbers without using conditional statements, >, <, == and - operators. Return 1 if a > b, -1 if a < b and 0 if a = b.
Here, negative of b is obtained by taking its 2's complement using biwsise operators. This is then added to a and the sign of the result is determined. See above question for sign() function.
int compare(int a, int b)
{
return sign(a + (~b + 1));
}
Write a function to return logical not of a given number x (i.e. !x), without using ! operator and conditional statements.
int not(int x)
{
int neg_x = ~x + 1;
return 1 ^ ((x>>31 & 1) | (neg_x>>31 & 1));
}
Another way: The second way exploits the fact that the right hand side of a logical AND (&&) is never evaluated if the left hand side is false (0) and similarly, the right hand side of a logical OR (||) is never evaluated if the left hand side is true (non-zero).int not(int x)
{
int res;
(x && ~(res=0)) || (res=1);
return res;
}
Write a function to implement conditional operator ?: using bitwise operators only.
int conditional(int a, int b, int c)
{
return ((~(!a<<31) >> 31) & b) | (((!a<<31) >> 31) & c);
}
/*
Another approach could have been like this:
int res;
(a && (res=b)) || (res=c); // But this WILL NOT WORK in case a=1 and b=0
// (as "res = b" returns b, so it will return 0 on the LHS of ||
// and then res will then be set to c).
return res;
*/
Write a function to print binary representation of a given number.
void printBinary(int x)
{
int i;
int msb = (sizeof(int) * 8) - 1; // 31 for a 4 byte int
for(i = msb; i >= 0; i--)
printf("%d", (x>>i) & 1);
}

3 comments
Write commentsLoving the content. Keep posting bro. Very useful.
ReplyI'm glad you found it interesting. Thanks.
Reply
ReplyI like your blog, I read this blog please update more content on python, further check it once at python online course