牛客網刷題——二進制中1的個數(涉及進制轉換,和計算機原碼、補碼轉換)

題目內容

明確幾個知識點

  • 十進制轉換為二進制(以及十進制轉八進制,十六進制等等,雖然這個題目不涉及)
  • 計算機的符號數的三種表示方法
    • 原碼
    • 反碼
    • 補碼 ==正數的補碼與原碼相同==
    • ==補碼的運算:模加負數等于負數的補碼==
graph LR
A[原碼] -- 符號位不變,數值位按位取反 --> B((反碼))
A[原碼] -- 符號位不變數值位按位取反末位再加1--> C(補碼)

進制轉化

以下所有內容都是使用python語言描述
//強大的內置函數
hex()   #十進制轉換為十六進制,以0x開頭
oct()    #十進制轉換位八進制,以0o開頭
bin()    #十進制轉換為二進制,以0b開頭
#所以只需要二進制數的話,建議加一個切片 [2:],這樣就可以得到基本的二級制數

完整代碼

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1(self, n):
        count = 0
        if n >= 0:
            s = bin(n)[2:]
        else:
        #   模加負數等于負數的補碼
            s = bin(pow(2,32)+n)[2:]
        for i in s:
            if i=='1':
                count+=1
        return count
        # write code here
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容