두 개의 숫자 x와 y가 있다고 가정합니다. 이 두 숫자 중 하나가 다른 숫자의 1의 보수인지 확인해야 합니다. 우리는 모두 이진수의 1의 보수가 0에서 1로 또는 1에서 0으로 모든 비트를 뒤집는다는 것을 알고 있습니다.
따라서 입력이 x =9, y =6과 같으면 이진 표현이 서로의 보수인 x =1001 및 y =0110이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- z =x XOR y
- z의 모든 비트가 설정되면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def all_one(n): if n == 0: return False; if ((n + 1) & n) == 0: return True return False def solve(x, y): return all_one(x ^ y) x = 9 y = 6 print(solve(x, y))
입력
9, 6
출력
True