在C ++中将给定N加1后更改的位数计数

我们给定一个数字,例如num,任务是计算将1加到一个数字后更改的总位数。

数字的二进制表示是通过将给定数字转换为0和1的形式完成的,并且可以通过多种方法来完成。在一种方法中,我们将给定数字的LCM计算为2,如果提醒不是0,则该位设置为1,否则它将设置为0。

位的加法表是

0 + 1 = 1
1 + 0 = 1
0 + 0 = 0
1 + 1 = 1 ( 1 bit carry)

例如

Input − num = 10Output − count is : 1

解释-10的二进制表示形式是1010,当添加1时,表示形式变为1011。显然只有一位被更改,因此计数为1。

Input − num = 5Output − count is : 2

解释-5的二进制表示形式为101,当添加1时,表示形式变为110。显然两位被更改,因此计数为2

以下程序中使用的方法如下

  • 输入整数类型的数量,假设为int num

  • 声明一个变量来存储计数,比如说int count

  • 拿另一个变量,比如说temp,它将计算num的XOR并将其设置为n ^(n + 1)

  • 在count变量中,调用__builtin_popcount(temp)。此函数用于计算给定整数二进制表示形式中的数字计数。它是GCC编译器的内置函数。

  • 返回计数

  • 打印结果。

示例

#include <iostream>
using namespace std;
//查找更改位数的功能
int changedbit(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