對計算機中負數表示的思考

2022-06-22 02:36:14 字數 742 閱讀 5924

我們都知道計算機中負數用補碼表示,即 :取反 加1,那為什麼這麼蛋疼的表示呢,既然要區分正負數,直接用最高位來區分不就行了嗎?

仔細思考了下,負數用補碼表示是為了實現加法和減法的統一(更確切說就是為了實現減法)。

設要表示的整數 i 由 b 位儲存,那麼 i <= 2^b - 1。下面討論均是整數。

設有一正整數i1,和正整數i2,那麼計算機如何計算i1 - i2。

i1 - i2 = (i1 + 2^b - i2) % (2^b)

而2^b - i2 == (~i2) + 1

所以將負數表示為(~i2) + 1可以統一加減法。對 (~i2)+1 求補 會得到i2,前面加上-就是-i2

同時(~i2) + 1 的 最高位為1,所以拿最高位來判斷是否要求補,是否要加-。

那麼對於無符號數,怎麼轉成有符號數,比如python中沒有int8_t型別,一般的整型數都是32位。

那麼可以判斷第8位是否為1,為1的話對其取反+1,然後加-即可。手動模擬這個過程

def main():

val = int(raw_input())

print val >> 7

if ( val >> 7 ) == 1:

val = (~val) & 0xff + 1 # 取後8位,預設32位

val = 0 - val

print val

if __name__ == '__main__':

main()

計算機中負數表示法

問乙個基本的問題。負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的 1000 那麼 8 怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於 0時就表示正數,等於 1時就表示負數。比如,在 8位機中,規定每個位元組的最高位為符號位。那麼,8就是 0000100...

計算機中正負數表示

在32位系統中,int型別佔4個位元組,一共是32個2進製位,int型別的首位是符號位,0代表正數,1代表負數,int的最大值是0x7fffffff 即除了最高的1bit其他31位都為1 而最小值是0x80000000 除了最高1bit,其他31位都為0 但是我有幾個問題,在這裡記錄解答一下 關於補...

負數在計算機中的表示

今天,老大讓我調查乙個浮點數轉換為整數的問題。自己就查了些資料,順便複習一下原碼 反碼和補碼。原碼 將乙個整數,轉換成二進位制,就是其原碼。如單位元組的5的原碼為 0000 0101 5的原碼為1000 0101。反碼 正數的反碼就是其原碼 負數的反碼是將原碼中,除符號位以外,每一位取反。如單位元組...