您的位置:首页 > 其它

8、二进制表示的数中1的个数

2018-03-26 19:35 113 查看

题目:

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解法:

利用二进制方法。n = n & (n-1) ,得到n用二进制表示后,去掉最低位的1的数字。
eg: n= 1111 0001 0000  ,经过上式后n=1111 0000 0000;
代码如下: int NumberOf1(int n) {
if(n==0)
return 0;
int count = 0;
while(n!=0)
{
count++;
n = n &(n-1);// 去除 二进制表示中 最低位的1
}
return count;
}

拓展:

根据 公式 n = n & (n-1) 可以去掉最后一个二进制表示的1,可解决下列问题
1、一句话判断某个数字是否为2的整数次方。 因为2的整数次方的数在二进制表达中,只有某一项为1,利用n = n & (n-1) 可以得到0.
2、判断两个用二进制表达的整数m和n,需要改变m的二进制表达多少位才能得到n。
eg:m=10  -> 1010   , n =13 ->1101 ,需要改变3位。 直接计算m^n得到的二进制表达中1的个数。转换成题述问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C