剑指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 阅读(97) 评论(0) 编辑 收藏 举报