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

相关推荐

2024-12-21 18:48
西安邮电大学 C++
黑皮白袜臭脚体育生:按使用了什么技术解决了什么问题,优化了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经390star,牛客上有完整文档教程
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务