두 개의 숫자 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