题目
题目的主要信息:
- 统计32位整型有符号数二进制中1的个数
- 因负数用补码表示,故不能用连除法
举一反三:
学习完本题的思路你可以解决如下题目:
方法一:循环按位比较法(推荐使用)
知识点:位运算
计算机的数字由二进制表示,我们平常的运算是对整个数字进行运算,但是还可以按照二进制的每一位分别进行运算。常见运算有位与、位或、移位、位异或等。
思路:
我们可以检查该数字的二进制每一位是否为1,如果遍历二进制每一位呢?可以考虑移位运算,每次移动一位就可以。至于怎么统计到1呢?我们都只知道数字1与数字相位与运算,其实只是最后一位为1就是1,最后一位为0就是0,这样我们只需要将数字1移位运算,就可以遍历二进制的每一位,再去做位与运算,结果为1的就是二进制中为1的。
具体做法:
- step 1:遍历二进制的32位,通过移位0-31次实现。
- step 2:将移位后的1与数字进行位与运算,结果为1就记录一次。
Java实现代码:
public class Solution {
public int NumberOf1(int n) {
int res = 0;
//遍历32位
for(int i = 0; i < 32; i++){
//按位比较
if((n & (1 << i)) != 0)
res++;
}
return res;
}
}
C++实现代码:
class Solution {
public:
int NumberOf1(int n)

最低0.47元/天 解锁文章
252

被折叠的 条评论
为什么被折叠?



