如何计算给定整数二进制表示中的1的数量。
假设您有一个数字20
,二进制为10100
,因此数字为2。
答案 0 :(得分:10)
您正在寻找的内容称为Hamming weight,并且有很多算法可以执行此操作。这是另一个直截了当的人:
def ones(n):
w = 0
while (n):
w += 1
n &= n - 1
return w
答案 1 :(得分:5)
>>> num = 20
>>> bin(num)[2:].count('1')
2
答案 2 :(得分:3)
使用真棒collections
模块。
>>> from collections import Counter
>>> binary = bin(20)[2:]
>>> Counter(binary)
Counter({'0': 3, '1': 2})
或者您可以使用内置函数count()
:
>>> binary = bin(20)[2:]
>>> binary.count('1')
2
甚至:
>>> sum(1 for i in bin(20)[2:] if i == '1')
2
但最后一个解决方案比使用count()
答案 3 :(得分:3)
快速实现这种炫目的常用方法是使用查找表:
table = [bin(i)[2:].count('1') for i in range(256)]
def pop_count(n):
cnt = 0
while n > 0:
cnt += table[n & 256]
n >>= 8
return cnt
在Python中,使用bin
和list.count
的任何解决方案都会更快,但如果你想用汇编程序编写它,这很好。
答案 4 :(得分:1)
>>> def ones(x):
"Count the number of ones in an integer's binary representation"
return bin(x).count('1')
>>> ones(20)
2
答案 5 :(得分:1)
int
类型自python 3.10a起具有新的方法int.bit_count()
,返回给定整数的二进制扩展数(即也称为填充计数),其个数如下:
n = 20
bin(n)
'0b10100'
n.bit_count()
返回2
,因为它的二进制表示形式中有2个。
答案 6 :(得分:0)
如果输入的号码是'号码'
number =20
len(bin(number)[2:].replace('0',''))
另一种解决方案是
from collections import Counter
Counter(list(bin(number))[2:])['1']
答案 7 :(得分:0)
我是一名新编码员,我发现这个逻辑很简单。新手可能更容易理解。
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.4",
"react-hot-loader": "^1.3.1",
"react-scripts": "1.0.7",
"serve": "^5.2.4",
"style-loader": "^0.18.2",
"webpack": "^3.0.0",
"webpack-dev-server": "^2.5.0"
},
答案 8 :(得分:0)
您可以使用移>>
,按位和&
来执行此操作,以检查最低有效位,如下所示:
def count_ones(x):
result = 0
while x > 0:
result += x & 1
x = x >> 1
return result
这可以通过向右移位位直到该值变为零,并计算沿途最低有效位为1的次数来实现。