#include<iostream> using namespace std; /* 如果我们把number减去1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有的0都会变成1。其余的所有位将不受到影响。 这样把number 与 number-1的值 相与 可以使number的二进制代码中少去一个1。 当把所有的1干掉的时候,number就变成了0,此时退出 */ int numOfBinary1(int number) { int result=0; int temp=number; while(number) { number = number &( number - 1); result++; } cout<<temp<<" : "<<result<<endl; return result; } /* 左移flag,去测number的每一位 */ int numOfBinary2(int number) { int count=0; unsigned int flag=1; while(flag) { if(number & flag) count++; flag=flag<<1; } return ; } int numOfBinary(int number) { return numOfBinary1(number); } int main() { // numOfBinary(-5); numOfBinary(-1); numOfBinary(-2); numOfBinary(+5); numOfBinary(0); numOfBinary(5); return 0; }