原碼 反碼和補碼

2021-10-19 11:54:15 字數 1211 閱讀 7600

為什麼正數補碼反碼原碼一樣?簡單的說這是一種規定。因為補碼和反碼被設計出來就是為了表示負數的,他們被設計出來只是為了計算機更好的去計算,假如說用原碼去計算兩個相反數的加法,比如+1和-1相加,我們假設分配四位給計算機,那+1就是0001,-1就是1001,他們兩個相加是不等於0的,而反碼和補碼就解決了這個問題,可以說補碼和反碼是原碼的公升級版,補碼又是反碼的公升級版,因為反碼中存在兩個0乙個+0和-0,補碼把-0捨去了,所以能比原碼和反碼多表示乙個負數。為什麼正數補碼反碼原碼一樣,因為我們只是想要解決正負數相加的問題,所以我們其實不用去管正數,我們只要去處理負數就好了。

10001的補碼是取反後在再加1,也就是11110+1=11111;

如果是11111變回原碼呢?我們可以採取逆過程先減1,11111-1=11110,再取反變為10001;(方法一)

如果要是在補碼變原碼時先取反再加一呢?結果為11111先取反為10000,再加1,10000+1=10001。這個結果與2是一樣的,並且也是和1中的原碼相吻合。(方法二)

為什麼兩種方法結果相同?

舉例:在取反前減1和在取反後加1的效果是一樣的。這就和 -(3-1) = -3+1 是乙個道理。

注意: 1.bit位全為1時表示負1(符號位是帶權值的,所有位值乘以對應的權值後相加求和)

2.最小負數沒有正數與之相對應。

注意:原碼表示的符號位是不帶權的。

與補碼相比,反碼除了有兩個零以外,其餘都是相似的。

正零:00…00

負零:11…11

最小負數:10…000,它表示 -2147483647。有原碼表示的最小負數111…111按位取反(符號位不變)得來。

最大整數:01…111,它表示 2147483647。所以正數和負數的個數是平衡的。

最小的負數用00…000表示,最大的正數用11…111表示,0一般用10…000表示,即通過將數加乙個偏移使其具有非負的表示形式。

淺紅色文字:淺紅色:

原碼 反碼和補碼

數值有正負之分 計算機就用乙個數的最高位存放符號 0為正 1為負 這就是機器數的原碼了 假設機器能處理的位數為 8.即字長為 1byte,原碼能表示數值的範圍為 127 0 0 127 共256個.有了數值的表示方法就可以對數進行算術運算 但是很快就發現用帶符號位的原碼進行乘除運算時結果正確 而在加...

原碼 反碼 和 補碼。

這裡只講下自己對反碼的理解。大家都知道使用反碼表示負數有兩個優點,1.可以使得減法可以和加法一樣。2.符號位也參與了運算。那這是為什麼呢?下面可以進行一些簡單的數學推導 根據反碼定義,對於負數,反碼是除符號為以外取反 1。例如,4 變換步驟如下。a 4 0 000 0100 b 取反 0 111 1...

原碼 補碼和反碼

1 原碼表示法 原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼表示可記作 x 原。例如,x1 1010110 x2 一1001010 其原碼記作 x1 原 1010110 原 01010110 x2 原 1001010 原 ...