在 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

相关文章