Java(求int型正整数在内存中存储时1的个数)

求int型正整数在内存中存储时1的个数

http://www.nowcoder.com/questionTerminal/440f16e490a0404786865e99c6ad91c9

通过31次无符号右移,逐位与1进行与运算,结果为1则计数

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();    //读取数字
        int n = 0;    //计数变量
        for(int i=0; i < 32; i++){
            if((num&1) == 1)    //如果末位为1则计数
                n++;
            num = num >>> 1;    //无符号右移
        }
        System.out.println(n);
    }
}


全部评论
位运算可以的
1 回复 分享
发布于 2022-04-22 15:28
菜鸟发问:请问为什么要小于32呢?
1 回复 分享
发布于 2021-10-18 12:04
用 while 循环,判断 num 是否为0 即可,不必循环那么多次
16 回复 分享
发布于 2022-03-28 17:01
>>> 为带符号移位,自己可以试试。还有就是for循环不如改成while
1 回复 分享
发布于 2023-03-11 19:19 湖北
应该把num=num>>>1放到if外面吧
1 回复 分享
发布于 2021-12-06 12:20
public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case int a = in.nextInt(); int count =0; // 进行与运算 for (int i=0;i<32;i++) { int n=(int)Math.pow(2,i); if ((n&a)==n) { count++; } } System.out.print(count); } } } 我感觉我这种解法思路更优
点赞 回复 分享
发布于 2024-03-26 16:54 湖北
能介绍下思路吗?没看懂哦
点赞 回复 分享
发布于 2024-03-01 18:48 浙江
一个整数在Java中由32位二进制组成,因此这个循环运行32次,如:5是00000000000000000000000000000101
点赞 回复 分享
发布于 2023-09-30 13:18 广东
>>>无符号?
点赞 回复 分享
发布于 2023-07-13 13:52 上海
我觉得应该小于30,循环30次
点赞 回复 分享
发布于 2022-12-31 13:43 河南
请教一下大佬,为什么要使用无符号右移呢
点赞 回复 分享
发布于 2022-11-09 12:14 陕西
i < 32,i从0开始,移位,一共不是移动了32次么,不是31次移位了吧?
点赞 回复 分享
发布于 2022-02-22 15:50

相关推荐

点赞 评论 收藏
分享
09-23 14:45
贵州大学 财务
牛客68802037...:怎么9.2佬人手一个中信证券实习
点赞 评论 收藏
分享
评论
159
17
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务