使用Python的二进制系统的负数

时间:2015-12-15 22:07:23

标签: python

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

2 个答案:

答案 0 :(得分:2)

只需要在负值上添加2 ** 32(或1 <&lt; 32)。

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

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

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

答案 1 :(得分:0)

使用%maxnum

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

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

所以要实现你想要的(int包含一些任意的最大值,在这种情况下是32位),只需使用modulo:

bin(num % 2*32)

请注意,使用%与简单+ max num之间的区别在于,这对正数和负数都有效。