在 C++ 中,计算将 1 添加到给定 N 后更改的位数
c++server side programmingprogramming更新于 2024/9/27 4:59:00
给定一个数字,假设为 num,任务是计算将 1 添加到数字后更改的总位数。
数字的二进制表示是通过将给定数字转换为 0 和 1 的形式来完成的,并且可以通过各种方法完成。在一种方法中,我们计算给定数字的 LCM 乘以 2,如果余数不是 0,则将该位设置为 1,否则将设置为 0。
位的加法表为
0 + 1 = 1 1 + 0 = 1 0 + 0 = 0 1 + 1 = 1 ( 1 bit carry)
例如
输入 − num = 10 输出 − 计数为:1
解释 − 10 的二进制表示形式为 1010,当向其添加 1 时,表示形式变为 1011。显然只有一位发生了变化,因此计数为 1。
输入 − num = 5 输出 − 计数为:2
解释 − 5 的二进制表示形式为 101,当向其添加 1 时,表示形式变为 110。显然,两位发生了变化,因此计数为 2
以下程序中使用的方法如下
输入整数类型的数字,比如说,int num
声明一个变量,用于存储计数,比如说,int count
取另一个变量,比如说 temp,它将计算 num 的 XOR 并将其设置为 n ^ (n + 1)
在 count 变量中调用 __builtin_popcount(temp)。此函数用于计算给定整数二进制表示形式的数字数量。它是 GCC 编译器的内置函数。
返回 count
打印结果。
示例
#include <iostream> using namespace std; // 查找更改位数的函数 intchangedbit(int n){ int XOR = n^(n + 1); // 计算异或值中的设置位数 int count = __builtin_popcount(XOR); return count; } int main(){ int n = 10; cout <<"count is: " <<changedbit(n); return 0; }
输出
如果运行上述代码,我们将得到以下输出 −
count is: 1