C++题解:
1.有符号的数变为无符号的数,并不会改变其二进制的表达方式
2.有符号的3是00000......11变为无符号还是00000.......11
3.有符号的-3是原码100000......11,补码就是1111111....01,变为无符号后还是111111111.....01
4.无符号数,右移高位补0,有符号数,右移高位补1
C++代码:
class Solution { public: int NumberOf1(int n) { unsigned int m = n, res = 0; //将有符号整数变为无符号数 while(m) res += m & 1,m >>= 1; //m&1表示m与1的各个位数相与,最后一位为1则加1,为0则加0 return res; } };