1. 程式人生 > >統計整數的二進位制表達裡有多少個1 Python版

統計整數的二進位制表達裡有多少個1 Python版

題目
給定一個整數,統計其二進位制表示裡有多少個1。

分析
方法1:迴圈迭代該數的二進位制的每一位,複雜度是 o(log2 n),n就是該整數
方法2:複雜度僅僅是1的個數。方法是採用位運算抹去0不需要處理。這裡的位運算表示式不光在這裡見到,其它地方的用處也非常多。

再者,計算機組成原理裡有詳細的對加減乘數四則運算的講解,如何表示負數、小數等等,不過我都忘了……這些運算與位運算息息相關。單靠位運算即可實現十進位制數的加減乘除

程式碼

    def count1(a):
        '''
            整數的二進位制表達裡有多少個1,複雜度為a的二進位制長度。
        '''
num = 0 while a != 0: num += a & 1 a >>= 1 return num def count2(a): ''' 整數的二進位制表達裡有多少個1,複雜度僅為1的個數 ''' num = 0 while a != 0: a = a & (a - 1) # 就是這個操作,需要掌握,它的本質含義是抹去了0不考慮 num += 1
return num