题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
代码:
#include <iostream> using namespace std; //这种解法不用对n的位数进行移动 int numberOf1(int n) { int cnt = 0; unsigned int flag = 1; while (flag) { if (flag & n) cnt ++; flag = flag<<1; } return cnt; } //一个整数减去1的值和它本身作与运算的 //结果相当于把它二进制表示中最后一位变成0 int numberOf2(int n) { int cnt = 0; while (n) { ++ cnt; n = (n-1) & n; } return cnt; } int main(){ int a = 1; int b = 0x7FFFFFFF; int c = 0x80000000; int d = 0xFFFFFFFF; int e = 0; cout<<numberOf2(a)<<endl; //1 cout<<numberOf2(b)<<endl; //31 cout<<numberOf2(c)<<endl; //1 cout<<numberOf2(d)<<endl; //32 cout<<numberOf2(e)<<endl; //0 return 0; }