题解 | #二进制中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;
}
全部评论

相关推荐

05-14 20:34
门头沟学院 Java
窝补药贝八股:管他们,乱说,反正又不去,直接说680
点赞 评论 收藏
分享
04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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