Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 두 숫자 더하기: 비트 연산과 풀 애더(Full Adder) 활용법

이 글에서는 주어진 문제 상황을 해결하기 위한 접근 방식과 솔루션을 자세히 살펴보겠습니다.

문제 정의

두 개의 큰 숫자가 주어졌을 때, 이 두 숫자를 더한 결과를 계산하여 출력하는 것이 목표입니다.

기본적인 접근 방법

가장 단순한 무차별 대입(bruteforce) 방식은 피연산자 사이에 + 연산자를 사용하는 것입니다. 또는 두 숫자를 반복 가능한(iterable) 객체에 저장한 뒤, 파이썬 표준 라이브러리에서 제공하는 내장 함수 sum()을 활용할 수도 있습니다.

하지만 이러한 방식은 십진수(decimal) 값을 직접 연산하기 때문에 시간 복잡도가 증가한다는 단점이 있습니다.

비트 단위 연산을 활용한 대안적 접근

이번에는 십진수의 각 비트(bit)를 직접 다루는 또 다른 방법을 살펴보겠습니다.

여기서는 디지털 회로의 핵심 개념인 애더(Adder)를 활용합니다. 애더는 두 입력값의 합(sum)과 올림수(carry)를 동시에 계산해주는 논리 구조로, 이를 소프트웨어적으로 구현하면 효율적으로 덧셈을 수행할 수 있습니다.

구현 코드는 아래와 같습니다.

예제 코드

def Add(x, y):
    # y가 0이 되면 carry는 더 이상 존재하지 않음
    while (y != 0):
        # 공통 비트로부터 carry 계산
        carry = x & y
        # x와 y의 비트별 합
        x = x ^ y
        # carry를 한 비트 왼쪽으로 시프트
        y = carry << 1
    return x

print(Add(19, 34))

실행 결과

53

동작 원리 설명

위 코드의 핵심 로직을 단계별로 이해해 보겠습니다.

  • carry = x & y: AND 연산을 통해 두 수에서 동시에 1인 비트를 찾아 올림수(carry)를 결정합니다.
  • x = x ^ y: XOR 연산으로 자리올림을 제외한 실제 합을 계산합니다.
  • y = carry << 1: 올림수는 한 자리 왼쪽으로 이동해야 하므로 왼쪽 시프트(left shift)를 적용합니다.
  • y가 0이 될 때까지 위 과정을 반복하면, 최종적으로 x에 두 수의 합이 저장됩니다.

모든 변수와 함수는 아래 그림과 같이 전역 범위(global scope)에서 선언됩니다.

파이썬으로 두 숫자 더하기: 비트 연산과 풀 애더(Full Adder) 활용법

결론

이 글에서는 풀 애더(full adder)의 개념을 응용하여 파이썬에서 두 숫자를 더하는 방법을 학습했습니다. 비트 연산 기반의 이러한 접근 방식은 저수준 연산의 원리를 이해하는 데 큰 도움이 되며, 임베디드 시스템이나 성능 최적화가 필요한 환경에서 유용하게 활용될 수 있습니다.