一般把十进制转化为二进制是除于2.但是除法的效率比移位运算远低的多。所以在实际编程中尽可能用移位运算代替乘除。
同样要考虑到负数移位的情况下会出现无限循环。
/* 剑指offer面试题10 当输入的值是负数的时候。例如-2,其结果为31. 因为int是占4字节,1个字节位。 */ #include <iostream> using namespace std; int BinaryOperation(int n){ int flag = 1; int count = 0; while(flag){ if(flag & n){ count++; } flag = flag << 1; } return count; } /* 更流弊的方法,不需要临时变量。拿下offer就靠她了。 */ /* int BinaryOperation(int n){ int count = 0; while(n){ ++count; n = n & (n-1); } return count; } */ int main() { int n; cin >> n; int result = BinaryOperation(n); cout << result; return 0; }