C++ 位运算计算二进制数中的1的个数

Posted Blocking The Sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 位运算计算二进制数中的1的个数相关的知识,希望对你有一定的参考价值。

题目描述

输入一个整数,输出该数二进制表示中1的个数。

思路

思路1

将该整数与 1 进行与运算,判断末位是否为 1 ,然后将 1 左移一位,判断整数倒数第二位是否为 1 ,以此类推,不断左移 1 ,直到 1 左移 32 位。

		sum =0;
        for(int j=0;j<31;j++){
            if((z&i)==i){
                sum++;
            }
            i=i<<1;
        }
        */
        return sum;

思路2

1、在我们的机器上,int数据类型是32位;
2、因此,我们将1从最低位一直移动到最高位,并将每一位与输出的数值a 做 与运算
3、如果a对应位是1,则将计数器 cnt+1,最终 cnt 就是该整数二进制数中1的个数。

        int i;
        int sum=0;
       	for( i=0; i<32; i++ ){
		    if( (z&(1<<i)) == (1<<i) ){
			    sum++;
		    }
	    }
	    return sum;

以上是关于C++ 位运算计算二进制数中的1的个数的主要内容,如果未能解决你的问题,请参考以下文章

C++ 计算二进制数中1的个数 可用于负数 无符号数 且无需遍历整数所有位

位运算求二进制数中1的个数

算法-求二进制数中1的个数

位运算(Bit manipulation)

BCD码

统计二进制数中的1的个数(0277)