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