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

Python으로 특정 위치의 비트가 설정(Set) 또는 해제(Unset) 상태인지 확인하는 방법

프로그래밍에서 숫자 n과 위치 값 k가 주어졌을 때, nk번째 비트가 설정(Set, 1)되어 있는지 아니면 해제(Unset, 0)되어 있는지 확인해야 하는 경우가 자주 발생합니다. 이때 비트의 위치는 가장 오른쪽(LSB)부터 세기 시작한다고 가정합니다.

문제 이해하기

예를 들어 입력이 n = 18, k = 2라고 가정해 보겠습니다. 18의 이진수 표현은 10010입니다. 오른쪽에서 두 번째 비트가 1이므로, 출력 결과는 "Set"이 됩니다.

해결 접근 방식

이 문제는 다음 단계를 통해 간단히 해결할 수 있습니다.

  1. n을 오른쪽으로 (k - 1)비트 시프트한 값을 temp에 저장합니다. 이렇게 하면 확인하려는 비트가 가장 오른쪽 끝자리로 이동합니다.
  2. temp와 1을 AND 연산(&)했을 때 결과가 1이면 해당 비트가 설정된 것이므로 "Set"을 반환하고, 그렇지 않으면 "Unset"을 반환합니다.

구현 코드

def solve(n, k):
    temp = n >> (k - 1)
    if temp & 1:
        return "Set"
    return "Unset"

n = 18
k = 2
print(solve(n, k))

입력

n = 18, k = 2

출력

Set

동작 원리 살펴보기

위 코드의 핵심은 두 가지 비트 연산입니다.

  • 오른쪽 시프트(>>): n >> (k - 1)은 숫자의 비트들을 오른쪽으로 k-1칸 밀어냅니다. 예를 들어 18(10010)을 1비트 오른쪽으로 시프트하면 9(1001)가 되어, 원래 두 번째 자리에 있던 비트가 첫 번째 자리로 이동합니다.
  • AND 연산(&): temp & 1은 가장 오른쪽 비트만 추출하는 역할을 합니다. 연산 결과가 1이면 해당 위치의 비트가 1(설정됨)이라는 뜻입니다.

이 방식의 시간 복잡도는 O(1)로 매우 효율적이며, 정수의 크기와 관계없이 일정한 성능을 보장하기 때문에 실무에서도 널리 활용됩니다.