15二进制中1的个数

请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。

"""
1. python 整数存取的时候没有位数限制。首先判断n是不是负数,当n为负数的时候,
直接用后面的while循环会导致死循环(因为负数左移最高位补1)
    或者这样解释:Python的数值类型不会出现溢出的情况,所以需要对边界值进行限定。

2. 
"""

def numberOfOne(n):
    """假设输入为整数,范围在-2^32~2^32之间"""
    # print(bin(n))
    count = 0
    if n < 0:
        n = n & 0xffffffff
    while n:
        count += 1
        n = (n - 1) & n
    return count
    

def numberOf1(n):
    """一个看起来酷炫、也确实能用,但实测比前面要慢的东西。"""
    # lyst = [(n>>i & 1) for i in range(0,32)]
    # print(bin(n))
    # print(lyst)
    # return sum(lyst)
    return sum([(n>>i & 1) for i in range(0,32)])

if __name__ == '__main__':
    print(numberOfOne(0))
    print(numberOfOne(3))
    print(numberOfOne(0x7FFFFFFF))
    print(numberOfOne(0x80000000))
    print(numberOfOne(0xFFFFFFFF))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容