在 C++ 中找出整数的 1 的补码


在这一节,我们将看到如何寻找一个整数的 1 的补码。我们可以使用补码操作符非常快速地完成此任务,但会生成 32 位补码值(4 字节整数)。这里我们希望生成n位补码。

假设我们有一个数字,例如 22。它的二进制等价项是 10110。补码值为 01001,与 9 相同。现在的问题是,如何找到这个值?首先,我们必须找到给定数字的位数。假设计数为 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

更新于:25-9 月-2019

3 千次浏览

开启您的职业生涯

通过完成课程获得认证

开始
广告