时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
热度指数:659564
本题知识点: 进制转化 补码反码原码 数学
题目描述
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
代码
function NumberOf1(n)
{
let sum = 0, flag = 1;
while(flag){
if(n&flag){
sum++;
}
flag = flag<<1;
}
return sum;
}
分析:
示范:
flag = 1 = 0000 0000 0000 0000 0000 0000 0000 0001
flag<<1 = 2 = 0000 0000 0000 0000 0000 0000 0000 0010
flag<<1<<1 = 4 = 0000 0000 0000 0000 0000 0000 0000 0100
先判断n在32位中的末位是否为1,如果为1(n&flag为1)则count++,
如果不为1则count不变,无论是否有1flag都左移一位,判断倒数第二位是否为1,
继续这样判断,直至判断32位中的第一位,判断完成后flag为0跳出while循环返回count。