-1的计数数字返回12而不是32

时间:2017-06-08 08:07:35

标签: python

对于以下简单函数来计算32位整数中的1的数量,对于输入-1,它应该返回32,但是得到12。

class Solution:
    def bitNum(self, n):
        bm = {
            0:0, 1:1, 2:1, 3:2, 4:1, 5:2, 6:2, 7:3,
            8:1, 9:2, 10:2, 11:3, 12:2, 13:3, 14:3, 
            15:4
            }
        return bm[n & 0xF] + bm[(n>>4) & 0xF] + bm[(n>>8) & 0xF]
        + bm[(n>>12) & 0xF] + bm[(n>>16) & 0xF] + bm[(n>>20) & 0xF]
        + bm[(n>>24) & 0xF] + bm[(n>>28) & 0xF]

但是如果使用var来存储结果,并且将split加上几个部分,则会返回正确的答案。为什么呢?

class Solution:
    def bitNum(self, n):
        bm = {
            0:0, 1:1, 2:1, 3:2, 4:1, 5:2, 6:2, 7:3,
            8:1, 9:2, 10:2, 11:3, 12:2, 13:3, 14:3, 
            15:4
            }
        bits =  bm[n & 0xF]
        bits += bm[(n>>4) & 0xF] + bm[(n>>8) & 0xF]
        bits += bm[(n>>12) & 0xF] + bm[(n>>16) & 0xF] + bm[(n>>20) & 0xF]
        bits += bm[(n>>24) & 0xF] + bm[(n>>28) & 0xF]
        return bits

1 个答案:

答案 0 :(得分:2)

可能将所有内容包围成'('和')'? :) 或者在行尾使用反斜杠:

return (a + b
+ c + d)