Awesome Bitwise Operations and Tricks with Examples

1. Set nth bit of integer x

x | (1<<n)

Example

#include<stdio.h>
int main() 
{
	int x = 10; //1010
	int n = 2;
	int result = x | (1<<n);  //1110
	printf("%d\n", result); //14	
	return 0;
}

2. Unset nth bit of integer x

x & ~(1<<n)

Example

#include<stdio.h>
int main() 
{
	int x = 10; //1010
	int n = 1;
	int result = x & ~(1<<n); //1000
	printf("%d", result2); 	//8
	return 0;
}

3. Toggle nth bit of x

x ^ (1<<n)

Example

#include<stdio.h>
int main() 
{
	int x = 10; //1010
	int n = 0;
	int result = x ^ (1<<n); //1011
	n = 3;
	result = result ^ (1<<n); //0011
	printf("%d\n", result); //3
	return 0;
}

4. Multiply integer x by the nth power of 2

x << n

Example

#include<stdio.h>
int main() 
{
	int x = 10;
	int n = 3;
	int result = x << n;  // 10 * (2^3)
	printf("%d\n", result); //80
	return 0;
}

5. Divide integer x by the nth power of 2

x >> n;

Example

#include<stdio.h>
int main() 
{
	int x = 80;
	int n = 3;
	int result = x >> n;  // 80 / (2^3)
	printf("%d\n", result); //10
	return 0;
}

6. Check equality of two integer

(num1 ^ num2) == 0; // num1 == num2

Example

#include<stdio.h>
int main() 
{
	int num1 = 10;
	int num2 = 10;
	if ((num1 ^ num2) == 0) 
		printf("Equal");
	else
		printf("Not Equal");
	return 0;
}

7. Check if an integer number is odd

(num & 1) == 1

Example

#include<stdio.h>
int main() 
{
	int num = 13;
	if ((num & 1) == 1)
		printf("Odd");
	else
		printf("Even");
	return 0;
}

8. Swap two integer values

//version 1
a ^= b;
b ^= a;
a ^= b;

//version 2
a = a ^ b ^ (b = a)

Example

#include<stdio.h>
int main() 
{
	int a = 5;
	int b = 7;
	
	//Version 1
	a ^= b;
	b ^= a;
	a ^= b;
	
	printf("a = %d & b = %d\n", a, b); // a = 7 & b = 5
	
	//Version 2
	a = a ^ b ^ (b = a);
	
	printf("a = %d & b = %d", a, b); // a = 5 & b = 7
	return 0;
}

9. Get the max of two integer values

b & ((a-b) >> 31) | a & (~(a-b) >> 31);

Example

#include<stdio.h>
int main() 
{
	int a = 5;
	int b = 7;
	
	int max = b & ((a-b) >> 31) | a & (~(a-b) >> 31);
	printf("%d", max);
	
	return 0;
}

10. Get the min of two integer values

a & ((a-b) >> 31) | b & (~(a-b) >> 31);

Example

#include<stdio.h>
int main() 
{
	int a = 5;
	int b = 7;
	
	int min = a & ((a-b) >> 31) | b & (~(a-b) >> 31);
	printf("%d", min);
	
	return 0;
}

11. Check whether both integer numbers have the same sign

(num1 ^ num2) >= 0;

Example

#include<stdio.h>
int main() 
{
	int num1 = 5;
	int num2 = -7;
	
	if ((num1 ^ num2) >= 0)
		printf("Same Sign");
	else
		printf("Different Sign");

	return 0;
}

12. Flip the sign of an integer number

num = ~num + 1;

Example

#include<stdio.h>
int main() 
{
	int num = 5;
	
	num = ~num + 1;
	printf("num = %d", num);

	return 0;
}

13. Check whether a integer number is power of 2

num > 0 && (num & (num - 1)) == 0;

Example

#include<stdio.h>
int main() 
{
	int num = 16;
	
	if (num > 0 && (num & (num - 1)) == 0)
		printf("Number is power of 2");
	else
		printf("Number is not power of 2");
	return 0;
}

14. Increment by 1 (num + 1)

-~num

Example

#include<stdio.h>
int main() 
{
	int num = 16;
	
	num = -~num;
	printf("num = %d", num);
	
	return 0;
}

15. Decrement by 1 (num - 1)

~-num

Example

#include<stdio.h>
int main() 
{
	int num = 16;
	
	num = ~-num;
	printf("num = %d", num);
	
	return 0;
}