剑指offer-二进制中1的个数(python)

这道题我看了答案我没懂,为什么要和1进行与操作呢,后来查了一下python的bin的用法,恍然大悟。
1.Python中的整型是补码形式存储的
2.Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,方便查看
在这里插入图片描述

3.Python中bin一个负数(十六进制表示),输出的是对应的二进制表示。
在这里插入图片描述

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        # write code here
        if n >= 0:
            return bin(n).count('1')
        else:
            return bin(n&0xffffffff).count('1')

如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。—-牛客网

        #second
        count=0
        while n&0xffffffff!=0:
            count+=1
            n=(n-1)&n
        return count
发布了69 篇原创文章 · 获赞 46 · 访问量 5279

猜你喜欢

转载自blog.csdn.net/qq_42738654/article/details/104220769
今日推荐