方法1:
通过与初始值为1的标志位进行与运算,判断最低位是否为1;
然后将标志位左移,判断次低位是否为1;
循环上述内容,直到将每一位都判断完毕。
//包含了所有C++的头文件 #include using namespace std; int main(){ int n = 0,num; //无符号类型则仅能表示大于等于0的值 unsigned int flag = 1; cin>>num; while(flag){ if(num & flag) n++; flag = flag << 1; } cout< 方法2:
对某一个整数和其减一后的数值进行与运算;
将其所得结果再次和结果减一后的数值进行与运算;
循环上述过程,直到与运算的结果为0;
原理如下:
如果某整数的最末位为1,那么减一后,最末位变成0;
如果某整数的最末位为0,那么减一后,最右边的1变成0,1左边的其余为保持不变,1右边的0全部变成1;
上述两种情况,减一前后整数相与的结果就是把原来的整数最右边的1以及1右边的其余位都变成0。
多次循环,每次都会把最右边的1变成0,循环次数就是1的个数。#includeusing namespace std; int main() { int n = 0,num; unsigned int flag = 1; cin>>num; while(num) { num = num & (num - 1); n++; } cout<



