15. 二进制中1的个数

二进制中1的个数

http://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8

  1. 首先把n和1做与运算,判断n末尾是不是1,然后将flag左移一位,判断第二位是不是1,但是如果不设置flag<2**32,会陷入死循环
class Solution:
    def NumberOf1(self, n):
        # write code here
        count = 0
        flag = 1
        while flag < 2**32:
            if n & flag:count += 1
            flag = flag << 1
        return count
  1. 把一个整数减去1,再和自己做与运算,就会将整数中最右边的1变为0,能做几次这样的操作,就有多少个1.而对于负数,最高位为1,而负数在计算机是以补码存在的,往右移,符号位不变,符号位1往右移,最终可能会出现全1的情况,导致死循环。与0xffffffff相与,就可以消除负数的影响
    例如:-3与0xf作与,会得到1101,这样是4位,和0xffffffff相与就是32位
    class Solution:
     def NumberOf1(self, n):
         # write code here
         count = 0
         if n < 0:
             n = n & 0xffffffff
         while n:
             count += 1
             n = (n - 1) & n
         return count
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务