(Python)
Let’s have a quick review of Bit Manipulation techniques in Python.
Bitwise Operators
| Operator | Description | Example |
| & | Bitwise AND | a & b |
| ` | Bitwise OR | a ` b |
| ^ | Bitwise XOR | a ^ b |
| ~ | Bitwise NOT | ~a |
| << | Left Shift | a << n |
| >> | Right Shift | a >> n |
Example Program
# Bit manipulation demo in Pythondef bit_operations(a: int, b: int): """Perform common bitwise operations on two integers.""" try: # Ensure inputs are integers if not isinstance(a, int) or not isinstance(b, int): raise ValueError("Both inputs must be integers.") print(f"a = {a} ({bin(a)})") print(f"b = {b} ({bin(b)})\n") # AND print(f"a & b = {a & b} ({bin(a & b)})") # OR print(f"a | b = {a | b} ({bin(a | b)})") # XOR print(f"a ^ b = {a ^ b} ({bin(a ^ b)})") # NOT print(f"~a = {~a} ({bin(~a)})") print(f"~b = {~b} ({bin(~b)})") # Left shift print(f"a << 2 = {a << 2} ({bin(a << 2)})") # Right shift print(f"a >> 2 = {a >> 2} ({bin(a >> 2)})") except ValueError as e: print(f"Error: {e}")# Example usageif __name__ == "__main__": bit_operations(7, 3) # 7 = 0b111, 3 = 0b011
Output:

a = 7 (0b111)
b = 3 (0b11)
a & b = 3 (0b11)
a | b = 7 (0b111)
a ^ b = 4 (0b100)
~a = -8 (-0b1000)
~b = -4 (-0b100)
a << 2 = 28 (0b11100)
Bit Manipulation Tricks
# Check if the k-th bit is set (0-indexed from right)def is_kth_bit_set(n, k): return (n & (1 << k)) != 0# Set the k-th bitdef set_kth_bit(n, k): return n | (1 << k)# Clear the k-th bitdef clear_kth_bit(n, k): return n & ~(1 << k)# Toggle the k-th bitdef toggle_kth_bit(n, k): return n ^ (1 << k)# Count set bits (Brian Kernighan’s Algorithm)def count_set_bits(n): count = 0 while n: n &= (n - 1) count += 1 return countn = 13k = 2print(f"n = {n} Binary n: ", bin(n))print(f"k = {k} Binary k: ", bin(k))print("Is 'k'th bit set? ", is_kth_bit_set(n,k))print("n after setting 'k'th bit: ", set_kth_bit(n,k), f"Binary n = ({bin(n)})")print("n after clear 'k'th bit: ", clear_kth_bit(n,k), f"Binary n = ({bin(n)})")print("n after toggle 'k'th bit: ", toggle_kth_bit(n,k), f"Binary n = ({bin(n)})")print("Set bits in n: ", count_set_bits(n))
Output:

n = 13 Binary n: 0b1101
k = 2 Binary k: 0b10
Is ‘k’th bit set? True
n after setting ‘k’th bit: 13 Binary n = (0b1101)
n after clear ‘k’th bit: 9 Binary n = (0b1101)
n after toggle ‘k’th bit: 9 Binary n = (0b1101)
Set bits in n: 3
