码迷,mamicode.com
首页 > 其他好文 > 详细

11 二进制中1的个数+二进制补充知识点

时间:2017-11-27 23:33:19      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:number   表示   个数   判断   进制   strong   esc   div   统计   

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
 
补充知识点:左移运算符 m << n表示把m左移n位,左移的时候最左边的位舍弃掉,最右边的位补0。
      右移运算符 m >> n表示把m右移n位,右移的时候如果是负数最左边的位补上1,如果是整数则在最左边补上0,最右边的位丢弃掉。
二进制运算与、或、非、异或。
记住结论:n = (n - 1) & n,则每次会将n的最右边一个1变为0。也就是二进制中有几个1就移动几次。
class Solution {
public:
     int  NumberOf1(int n) {
         int cnt = 0;
         while(n != 0){
             n = n & (n - 1);
             ++cnt;
         }
         return cnt;
     }
};

 

相关题目:

1)用一条语句判断一个整数是不是2的整数次方。如果一个整数是2的整数次方,那么它的二进制中有且只有一位是1。使用n = n & (n - 1) 之后就会让n变为0。

2)输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n,方法是首先求这两个数的异或,第二步统计异或结果中1的个数。

 

 

 

11 二进制中1的个数+二进制补充知识点

标签:number   表示   个数   判断   进制   strong   esc   div   统计   

原文地址:http://www.cnblogs.com/dingxiaoqiang/p/7906406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!