位运算
位运算包括六种运算:与、或、异或、按位取反、左移和右移。
10.(二进制中1的个数)请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2。考虑负数情况!
代码1:
int NumberOf1(int n){
int count = 0;
unsigned int flag = 1;
while(flag){
if(n & flag)
count++;
flag = flag << 1;
}
return count;
}
代码2:
int NumberOf1(int n){
int count = 0;
while(n){
++count;
n = (n - 1) & n;
}
}
测试用例:
(1)正数(包括边界值1、0x7FFFFFFF)
(2)负数(包括边界值0x80000000、0xFFFFFFFF)
(3)0
把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0.很多二进制的问题都可以用这个思路解决。