Find the Sum of Two Binary Numbers

problem-solving
Published

June 26, 2023

Adding binary numbers is a fundamental operation in computer science. While computers handle this seamlessly, understanding the process is crucial for any programmer. This blog post will guide you through different methods of adding two binary numbers in Python, from the basic approach to more efficient techniques.

Method 1: Converting to Decimal, Adding, and Converting Back

This is the most straightforward method. We convert both binary numbers to their decimal equivalents, add them, and then convert the result back to binary.

def add_binary_decimal(bin1, bin2):
  """Adds two binary numbers by converting them to decimal first."""
  decimal1 = int(bin1, 2)  # Convert binary string to decimal
  decimal2 = int(bin2, 2)
  decimal_sum = decimal1 + decimal2
  binary_sum = bin(decimal_sum)[2:] # Convert decimal sum back to binary, [2:] removes "0b" prefix
  return binary_sum

#Example
binary_num1 = "1011"
binary_num2 = "100"
result = add_binary_decimal(binary_num1, binary_num2)
print(f"The sum of {binary_num1} and {binary_num2} is: {result}") #Output: 1111

This method is easy to understand but can be inefficient for very large binary numbers due to the overhead of conversions.

Method 2: Bitwise Addition

A more efficient approach uses bitwise operators. This method mimics how binary addition is performed at the hardware level. It iteratively adds bits, handling carry-overs.

def add_binary_bitwise(bin1, bin2):
    """Adds two binary numbers using bitwise operations."""
    max_len = max(len(bin1), len(bin2))
    bin1 = bin1.zfill(max_len)  # Pad with leading zeros for equal length
    bin2 = bin2.zfill(max_len)
    carry = 0
    result = ""
    for i in range(max_len - 1, -1, -1):
        bit1 = int(bin1[i])
        bit2 = int(bin2[i])
        sum_bits = bit1 + bit2 + carry
        result = str(sum_bits % 2) + result  #LSB
        carry = sum_bits // 2  #carry bit

    if carry:
        result = "1" + result
    return result


binary_num1 = "1011"
binary_num2 = "100"
result = add_binary_bitwise(binary_num1, binary_num2)
print(f"The sum of {binary_num1} and {binary_num2} is: {result}") # Output: 1111

This bitwise method is generally faster and more memory-efficient, especially for larger binary numbers, as it avoids the overhead of decimal conversions.

Method 3: Using the sum() function with a generator

This approach leverages Python’s built-in sum() function combined with a generator to elegantly handle the binary addition.

def add_binary_generator(bin1, bin2):
    """Adds two binary numbers using a generator and sum()."""

    max_len = max(len(bin1), len(bin2))
    bin1 = bin1.zfill(max_len)
    bin2 = bin2.zfill(max_len)
    
    sum_generator = (int(bit1) + int(bit2) for bit1, bit2 in zip(bin1, bin2))
    decimal_sum = sum(sum_generator)
    return bin(decimal_sum)[2:]

#Example
binary_num1 = "1011"
binary_num2 = "100"
result = add_binary_generator(binary_num1, binary_num2)
print(f"The sum of {binary_num1} and {binary_num2} is: {result}") # Output: 1111

This method provides a concise and Pythonic way to achieve binary addition. However, it still relies on converting to decimal which can be less efficient for very large numbers than the bitwise approach.

Choosing the best method depends on the specific application and the size of the binary numbers involved. For most cases, the bitwise addition offers a good balance of readability and efficiency. For extremely large numbers, more advanced algorithms might be necessary.