二进制中1的个数 python解法

二进制中1的个数

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

python中首先明确一点就是二进制没有位数的概念,所以也就无法获得负数真实表示方法
n = -3
n = n & 0xffffffff #n=4294967293
bin(n)#查看二进制形式:'0b11111111111111111111111111111101'
获得的最终结果python会认为是一个正数(因为没有位数的概念,所以首位的1并不代表符号位),那么获得
0b11111111111111111111111111111101
只是形式上和-3的补码相同。
python中,对于负数,无论是右移操作,还是n&(n-1)操作,都会陷入死循环。
所以利用上述这个小技巧,将负数的影响用于0xffffffff相与变为python认为的正数(与机器中的补码相同)。
然后利用正数来进行操作就简单了。
# -*- coding:utf-8 -*-
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

全部评论
我没看懂为什么python中当n为负数时 n & n-1 会导致死循环, 因为我尝试过是可以得到答案的. 后来我看到这篇文章.https://www.zhihu.com/question/314455297, 原来作者的意思是在循环中进行 n & n-1 会导致死循环.
1 回复 分享
发布于 2020-08-15 17:13

相关推荐

大摆哥:刚好要做个聊天软件,直接让你帮他干活了
点赞 评论 收藏
分享
码农索隆:我头回见校招简历把个人优势写在最前面的,是我老了吗
点赞 评论 收藏
分享
评论
31
2
分享

创作者周榜

更多
牛客网
牛客企业服务