我正在使用Python解决任务。
我需要计算给定值中的非零位数。我对正数没有任何问题,因为我使用函数bin()并计算'1'的数量,但无法理解负数有什么问题。例如,-1等于11111111111111111111111111111111
,但是当我使用函数bin()时,它给出'-0b1'。请告诉我如何正确转换它。
答案 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之间的区别在于,这对正数和负数都有效。