Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 정수의 1의 보수 찾기

<시간/>

이 섹션에서는 정수의 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