在本节中,我们将看到如何找到整数的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