在 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP