在 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
广告