题解 | #二进制中1的个数#

二进制中1的个数

http://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。

// - 数字在内存中 1. 正数是原码存储 2. 负数是补码的形式存储的  
//    - eg1: 十进制的  7 对应二进制为: 00000000 00000000 00000000 00000111 (原码)
//    - eg2:十进制的 -7 对应二进制为: 11111111 11111111 11111111 11111001 (因为是负数所以是补码)
 public int NumberOf1(int n) {
    int s = 0;
    while(n != 0){ // 如果n为0 不论正负其二进制中没有 1 
        s += (n&1); // 用目标数字与1进行与运算 以数字 7 为例 : 7 & 1 ==> 1  如果值为 1 则说明了 该数 的最低位是 1  s 加上 1
        n >>>= 1; // 将目标数字进行移位操作  继续以 7 为例 : 7 >>> 1 => 3 二进制  00000000 00000000 00000000 00000011
    }
    return s;
}
全部评论

相关推荐

10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务