Python program to extract 'k' bits from a given position?

Bit extraction involves extracting a specific number of bits from a given position in a number's binary representation. This is useful in low-level programming, cryptography, and data manipulation tasks.

Understanding the Problem

Given a number, we need to extract 'k' consecutive bits starting from a specific position 'pos' (counted from the right, starting at 0). The extracted bits are then converted back to decimal.

Example

Input: number=170, k=5, pos=2   
Output: 21

Binary of 170: 10101010
Position 2 from right, extract 5 bits: 01010
Decimal value: 21

Algorithm

The algorithm follows these steps ?

  1. Convert the number to binary representation using bin()
  2. Remove the '0b' prefix from the binary string
  3. Calculate the starting and ending indices for bit extraction
  4. Extract the k-bit substring using slicing
  5. Convert the extracted binary substring back to decimal

Implementation

def extract_k_bits(number, k, pos):
    """
    Extract k bits from a given position in a number
    Args:
        number: Input number
        k: Number of bits to extract
        pos: Position from right (0-indexed)
    Returns:
        Extracted bits as decimal number
    """
    # Convert to binary and remove '0b' prefix
    binary_str = bin(number)[2:]
    
    # Calculate indices for extraction
    end_index = len(binary_str) - pos
    start_index = end_index - k + 1
    
    # Extract k bits
    extracted_bits = binary_str[start_index:end_index + 1]
    
    # Convert back to decimal
    result = int(extracted_bits, 2)
    
    return result

# Test the function
number = 170
k = 5
pos = 2

print(f"Number: {number}")
print(f"Binary: {bin(number)[2:]}")
print(f"Extracted {k} bits from position {pos}: {extract_k_bits(number, k, pos)}")
Number: 170
Binary: 10101010
Extracted 5 bits from position 2: 21

Step-by-Step Visualization

def extract_bits_detailed(number, k, pos):
    binary_str = bin(number)[2:]
    print(f"Original number: {number}")
    print(f"Binary representation: {binary_str}")
    print(f"Binary length: {len(binary_str)}")
    
    # Calculate indices
    end_index = len(binary_str) - pos
    start_index = end_index - k + 1
    
    print(f"End index: {end_index}")
    print(f"Start index: {start_index}")
    
    # Extract bits
    extracted_bits = binary_str[start_index:end_index + 1]
    print(f"Extracted bits: '{extracted_bits}'")
    
    # Convert to decimal
    result = int(extracted_bits, 2)
    print(f"Decimal result: {result}")
    
    return result

# Example with detailed output
extract_bits_detailed(170, 5, 2)
Original number: 170
Binary representation: 10101010
Binary length: 8
End index: 6
Start index: 2
Extracted bits: '01010'
Decimal result: 21

Alternative Implementation Using Bitwise Operations

def extract_bits_bitwise(number, k, pos):
    """
    Extract k bits using bitwise operations
    """
    # Right shift to remove bits below position
    shifted = number >> pos
    
    # Create mask with k bits set to 1
    mask = (1 << k) - 1
    
    # Apply mask to get only k bits
    result = shifted & mask
    
    return result

# Compare both methods
number = 170
k = 5
pos = 2

method1 = extract_k_bits(number, k, pos)
method2 = extract_bits_bitwise(number, k, pos)

print(f"String method result: {method1}")
print(f"Bitwise method result: {method2}")
print(f"Both methods match: {method1 == method2}")
String method result: 21
Bitwise method result: 21
Both methods match: True

Conclusion

Bit extraction can be implemented using string manipulation or bitwise operations. The string method is more intuitive for beginners, while the bitwise approach is more efficient for performance-critical applications.

---
Updated on: 2026-03-24T20:55:45+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements