剑指offer--面试题10-整数的二进制中有多少个1

来源:互联网 发布:网络借贷备案信息披露 编辑:程序博客网 时间:2024/06/05 20:28
//normal solutionint numberOf1(int n){int count=0;int flag=1;while(flag){if(n&flag) count++;flag<<=1;}}//great solution//把一个整数减一,再和原来的整数与,会把最右边一个1变成0.那么一个整数的二进制有多少个1,//就会做多少次这样的运算int numberof1(int n){int count=0;while(n){n=n&(n-1);count++;}return;}int main(int argc, char* argv[]){printf("Hello World!\n");return 0;}


相关题目:

1.用一条语句判断一个整数是不是2的整数次方。如果是整数次方,它只有一位为1,按照上面的运算,如果减去1,再和自己做与运算,则为0,则只有一位为1.

2.输入两个整数M和N,计算需要改变M的二进制表示中的多少位,才能得到N。该计算可以分为两步,第一步求异或运算,第二步求异或运算的结果包含几个1.


举一反三:把一个整数减1之后与自身做与运算,相当于把最后一位为1 的位,变成为0.

0 0