題目內容
明確幾個知識點
- 十進制轉換為二進制(以及十進制轉八進制,十六進制等等,雖然這個題目不涉及)
- 計算機的符號數的三種表示方法
- 原碼
- 反碼
- 補碼 ==正數的補碼與原碼相同==
- ==補碼的運算:模加負數等于負數的補碼==
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