题解 | #求int型正整数在内存中存储时1的个数#

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

https://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int number = in.nextInt();
        int count = 0;
        while(number != 0){
            ++count;
            number = ( number - 1 ) & number;
        }
        System.out.print(count);
    }
}

本题主要考察位运算。需要发现一个规律就是:将一个整数减去1, 然后与整数做与运算,那么会将该整数最右边的1变成0。这里举一个例子,比如12对应的二进制数为1100,将12减1,得到11二进制数1011,然后将1100与1011做与运算,得到1000,这样,1100最右边的1就变成了0。因此,我们只需要重复这个操作,直到将这个整数的所有位都变成0,没处理一次就表示整数对应的二进制数有1,可以进行记录。最后输出1的个数即可。

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务