用C ++查找整数的补码

在本节中,我们将看到如何找到整数的1的补全。我们可以使用补码运算符非常快地完成此任务,但是它将产生32位补码值(4-bype整数)。在这里,我们需要n位数字的补码。

假设我们有一个数字说22。等效的二进制数是10110。补码的值是01001,它与9相同。现在问题来了,如何找到该值?首先,我们必须找到给定数量的位数。假设计数为c(此处22 = 5)。我们必须做5 1s。因此,这将是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