Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 두 숫자의 L에서 R 범위의 비트가 서로의 보수인지 확인하십시오.

<시간/>

두 개의 숫자 x와 y와 주어진 범위(왼쪽, 오른쪽)가 있다고 가정합니다. 주어진 두 숫자에서 왼쪽에서 오른쪽으로 범위의 모든 비트가 서로의 보수인지 여부를 확인해야 합니다. 오른쪽에서 왼쪽으로, 따라서 최하위 비트가 첫 번째 위치에 있는 것으로 간주된다는 점을 명심해야 합니다.

따라서 입력이 x =41 y =54 왼쪽 =2 오른쪽 =5와 같으면 41 및 54의 이진 표현이 101001 및 110110이므로 출력은 True가 됩니다. x 및 y의 범위 2에서 5까지의 비트 서로 보완적인 "1001"과 "0110"입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • temp :=x XOR y
  • temp 범위(왼쪽, 오른쪽)의 모든 비트가 1이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

def are_all_setbits_in_range(n, left, right):
   val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1)
   new_value = n & val
   if val == new_value:
      return True
   return False
def solve(x, y, left, right):
   temp = x ^ y
   return are_all_setbits_in_range(temp, left, right)
x = 41
y = 54
left = 2
right = 5
print(solve(x, y, left, right))

입력

41, 54, 2, 5

출력

True