输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解析:利用右移运算,前提将int转换为unsigned int,这样在无符号数上的右移操作等效于逻辑右移,而不是算术右移
1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int cnt = 0; 5 unsigned data = (unsigned)n; 6 while(data){ 7 if(data&1){ 8 ++cnt; 9 } 10 data = data>>1; 11 } 12 return cnt; 13 } 14 };