Categories
Computer Science

Bit Manipulation Basics

(Python)

Let’s have a quick review of Bit Manipulation techniques in Python.

OperatorDescriptionExample
&Bitwise ANDa & b
`Bitwise ORa ` b
^Bitwise XORa ^ b
~Bitwise NOT~a
<<Left Shifta << n
>>Right Shifta >> n
Python
# Bit manipulation demo in Python
def 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 usage
if __name__ == "__main__":
bit_operations(7, 3) # 7 = 0b111, 3 = 0b011

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)

Python
# 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 bit
def set_kth_bit(n, k):
return n | (1 << k)
# Clear the k-th bit
def clear_kth_bit(n, k):
return n & ~(1 << k)
# Toggle the k-th bit
def 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 count
n = 13
k = 2
print(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