剑指offer:二进制中1的个数

 输入一个整数,输出该数二进制表示中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 };

 

posted on 2018-04-02 20:53  CreatorKou  阅读(96)  评论(0编辑  收藏  举报

导航