이 섹션에서는 정수의 1의 완전함을 찾는 방법을 볼 것입니다. 보수 연산자를 사용하여 이 작업을 매우 빠르게 수행할 수 있지만 32비트 보수 값(4바이트 정수)이 됩니다. 여기서 우리는 n비트 숫자의 보수를 원합니다.
22라는 숫자가 있다고 가정합니다. 이진 값은 10110입니다. 보완된 값은 9와 동일한 01001입니다. 이제 이 값을 찾는 방법에 대한 질문이 나옵니다. 먼저 주어진 숫자의 비트 수를 찾아야 합니다. 카운트가 c라고 가정합니다(여기서 22의 경우 c =5). 5 1을 만들어야 합니다. 그래서 이것은 11111이 될 것입니다. 이것을 만들기 위해 우리는 1을 왼쪽 c번만큼 이동한 다음 1을 뺍니다. 1을 왼쪽으로 5번 쉬프트하면 100000이 되고 1을 빼면 11111이 됩니다. 그런 다음 11111과 10110을 XOR 연산하여 보수를 구합니다.
예시
#include <iostream> #include <cmath> using namespace std; int findComplement(int n) { int bit_count = floor(log2(n))+1; int ones = ((1 << bit_count) - 1); return ones ^ n; } int main() { int number = 22; cout << "One's Complement of " << number << " is: " << findComplement(number); }
출력
One's Complement of 22 is: 9