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

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

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

使用逻辑与运算解决

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        final int bit = 32;

        Scanner in = new Scanner(System.in);
        int num = in.nextInt();

        /*
            例如:一个数字 83,和它的二进制表示 1010011,即把 1 的数字都相加,
            64 + 16 + 2 + 1 = 83,注意 ... 的意思是前方有 32 位省略表示:
            ... 64 32 16  8  4  2  1
            ...  1  0  1  0  0  1  1
            得到之后,开始与 1 进行取按位与运算(&),因为 0 & x 为 0,如果最后 = 1,说明此位是 1
            ... 1010011
            ... 0000001
            &
            ------------------------------------
            ... 0000001
            此位比较完毕,再无符号右移 1 位,变为
            ... 0101001 >>> 1(被挤出去)
            ... 0000001
            &
            ------------------------------------
            ... 0000001
        */

        int count = 0;
        for (int i = 0; i < 32; i++) {
            if((num & 1) == 1) {
                count ++;
            }
            // 无符号右移
            num = num >>> 1;
        }
        System.out.println(count);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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