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

파이썬으로 양의 정수의 비트를 반전시키는 방법

양의 정수의 비트를 반전시키는 것은 대표적인 비트 조작 문제 중 하나입니다. 파이썬에서는 내장 함수인 bin()을 사용해 숫자를 이진수 문자열로 변환한 뒤, 문자열 슬라이싱으로 비트 순서를 뒤집고, 다시 정수로 변환하는 방식으로 간단하게 해결할 수 있습니다.

구체적인 동작 과정은 다음과 같습니다. 먼저 bin() 함수로 숫자를 이진수로 변환합니다. 이때 bin()은 결과 앞에 0b 접두사를 붙이므로, 처음 두 문자를 제외한 나머지 부분을 뒤집습니다. 그다음 지정된 비트 크기(bit_size)에 맞도록 부족한 자릿수만큼 뒤에 '0'을 채워 넣고, 최종적으로 뒤집힌 이진수 문자열을 정수로 변환합니다.

알고리즘

integernumber(n, bit_size)
/* n은 입력 숫자, bit_size는 비트 크기 */
1단계: bin() 함수를 사용해 숫자를 이진수 문자열로 변환한다.
2단계: '0b' 접두사(처음 두 문자)를 건너뛰고 나머지 문자열을 뒤집는다.
3단계: 비트 크기에 맞도록 뒤집힌 문자열 뒤에 부족한 만큼 '0'을 덧붙인다.
4단계: 뒤집힌 이진수 문자열을 정수로 변환하여 출력한다.

예제 코드

# 양의 정수의 비트를 반전시키는 파이썬 프로그램
def integernumber(n, bit_size):
    bin_number = bin(n)
    reverse_number = bin_number[-1:1:-1]
    reverse_number = reverse_number + (bit_size - len(reverse_number)) * '0'
    print("반전된 비트 ::>", int(reverse_number, 2))

# 드라이버 코드
if __name__ == "__main__":
    n = int(input("숫자 입력 ::>"))
    bit_size = int(input("비트 크기 입력 ::>"))
    integernumber(n, bit_size)

실행 결과

숫자 입력 ::>1
비트 크기 입력 ::>32
반전된 비트 ::> 2147483648

숫자 입력 ::>2147483648
비트 크기 입력 ::>32
반전된 비트 ::> 1

동작 원리 살펴보기

n = 1, bit_size = 32인 경우를 예로 들면 다음과 같이 동작합니다.

  • bin(1)'0b1'
  • '0b1'[-1:1:-1]'1' ('0b' 접두사를 제외하고 뒤집음)
  • 32비트에 맞게 '0'을 채움 → '10000000000000000000000000000000'
  • int('1000...', 2)2147483648

여기서 슬라이스 표현식 [-1:1:-1]은 문자열의 마지막 문자부터 인덱스 1(두 번째 문자) 바로 앞까지 역방향으로 읽는다는 의미입니다. 따라서 0b 접두사는 자연스럽게 제외되고 실제 비트 부분만 반전됩니다. 이 방법을 활용하면 별도의 반복문 없이 한 줄의 슬라이싱으로 비트 반전을 손쉽게 구현할 수 있습니다.