You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何int.bit_count()等效于bin(self).count("1")且不统计二进制中的0?

关于Python int.bit_count()的两个疑问解答

先明确背景:Python 3.11+ 中的int.bit_count()方法返回整数绝对值二进制表示中1的个数(也叫种群计数),用bin(self).count("1")模拟实现能得到完全相同的结果。

疑问1:为什么int.bit_count()和bin(self).count("1")结果相等?

  • 对正整数n来说,bin(n)返回带0b前缀的二进制字符串(比如bin(19)是'0b10011'),字符串里的1的数量就是n二进制表示中1的个数,和n.bit_count()的统计目标完全匹配。
  • 对负整数-n来说,bin(-n)返回'-0bxxxx'格式的字符串,count("1")只会统计xxxx部分的1,这正好是n(即原数的绝对值)的二进制中1的个数,而(-n).bit_count()本身就返回原数绝对值的二进制1的个数,所以结果也一致。
  • 本质上,bit_count()的设计逻辑就是统计整数绝对值二进制中的1的数量,而bin()生成的字符串里的1的数量刚好对应这个统计结果,所以两者输出相等。

疑问2:为什么bit_count()不统计二进制中的0?

  • 这个方法的核心是实现种群计数(population count),这是计算机领域的标准术语,定义就是统计二进制表示中1的个数,常用于哈希计算、密码学、位运算优化等场景,本身就和0的数量无关。
  • 另外,Python的整数是任意精度的,没有固定位数限制(不像C语言里的int有32位/64位固定长度),如果要统计0的数量,根本没法确定“总位数”——比如数字5的二进制可以是101,也可以补位成000101,不同补位方式得到的0的数量完全不同,统计0没有统一的实际意义。

示例代码验证

# 正整数测试
n = 19
print(bin(n))          # 输出 '0b10011'
print(n.bit_count())   # 输出 3
print(bin(n).count("1"))  # 输出 3

# 负整数测试
print(bin(-n))         # 输出 '-0b10011'
print((-n).bit_count())# 输出 3
print(bin(-n).count("1")) # 输出 3

内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:50:44