【问题标题】:Negative numbers to binary system with Python [duplicate]使用 Python 将负数转换为二进制系统 [重复]
【发布时间】:2025-12-11 13:55:01
【问题描述】:

我正在使用 Python 解决一项任务。 我需要计算给定值中非零位的数量。当我使用函数 bin() 并计算“1”的数量时,我对正数没有任何问题,但无法理解负数有什么问题。例如,-1 等于11111111111111111111111111111111,但是当我使用函数 bin() 时,它会给出“-0b1”。请告诉我如何正确转换它。

【问题讨论】:

  • Python 具有任意精度整数,因此您对二进制补码算法的期望是不正确的。也许 pack 或 struct 可以帮助你。
  • "例如,-1 等于 ..." 不正确。它等于0b11...11。但由于无法表示无限位数,我们只使用-0b1 代替。

标签: python


【解决方案1】:

只需要在负值上加上 2**32(或 1

bin(-1+(1<<32))
'0b11111111111111111111111111111111'

或对所有值使用以下命令:

a = bin(val if val>0 else val+(1<<32))

【讨论】:

  • 或者,一般来说,2**k 来模拟一个 k 位的“字”大小。
  • 如果答案有帮助且令人满意,记得标记答案
  • '
【解决方案2】:

使用%maxnum:

bin(-1%20) == bin(19)

正如 cmets 中所解释的那样,您获得所拥有的东西的原因是因为 int 是如何以二进制表示的。我不能告诉你太多,但它与各种事情有关,包括任意字节大小、无符号/有符号整数等。

所以要实现你想要的(int 环绕一些任意最大值,在本例中为 32 位),只需使用模数:

bin(num % 2*32)

请注意,使用 % 与仅使用 + 最大数量之间的区别在于,这适用于正数和负数。

【讨论】: