一.機器數和真值
機器數乙個數在計算機中的二進位制表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號, 正數為0, 負數為1。
eg. 十進位制7機器數就是0000 0111,十進位制-7機器數就是1000 0111。
真值 將帶符號位的機器數對應的真正數值稱為機器數的真值。就是上面例子裡的7和-7。
因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 1000 0111,其最高位1代表負,其真正數值是 -7 而不是形式值135(1000 0011轉換成十進位制等於135)。
二.原碼 反碼 補碼的基本概念和計算方法原碼
原碼就是符號位加上真值的絕對值(就是機器數), 即用第一位表示符號, 其餘位表示值。
[7]=[0000 0111]原
[-7]=[1000 0111]原
原碼是人腦最容易理解和計算的表示方式。
反碼 正數的反碼是其本身。
[7]=[0000 0111]原=[0000 0111]反
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反。
[-7]=[1000 0111]原=[1111 1000]反
補碼 正數的補碼就是其本身。
[7]=[0000 0111]原=[0000 0111]補
負數的補碼是在反碼的基礎上+1。
[-7]=[1000 0111]原=[1111 1001]補
對於負數, 補碼表示方式是人腦無法直**出其數值的。
三.為何要使用原碼 反碼 補碼
兩個數做加減的時候,人腦很自然的會區分正負數並做相應運算。但計算機裡面,只有加法器,沒有減法器,所有的減法運算,都必須用加法進行,而且是保留符號位的加法運算。於是產生了反碼 補碼。
先看看三種運算:
原碼運算。如果用原碼表示,讓符號位也參與計算,顯然對於減法來說,結果是不正確的。這也就是為何計算機內部不使用原碼表示乙個數。
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [1000 0010]原 = -2
反碼運算。發現用反碼計算減法,結果的真值部分是正確的。而唯一的問題其實就出現在"0"這個特殊的數值上. 雖然人們理解上+0和-0是一樣的,但是0帶符號是沒有任何意義的。而且會有[0000 0000]原 和[1000 0000]原 兩個編碼表示0。
1 - 1 = 1 + (-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
補碼運算。解決了0的符號。
1 - 1 = 1 + (-1) = [0000 0001]補 + [1111 1111]補 = [0000 0000]補 = [0000 0000]原 = 0
四.-128的補碼問題
假設機器能處理的位數為8,即乙個位元組,如果不考慮最高位用做符號位的情況,8位可以表示的資料區間是0000 0000 - 1111 1111,即0-255,共256個資料。
如果考慮最高位用做符號位的情況,8位可以表示的資料區間是1111 1111 -1000 0000和0000 0000 - 0111 1111,即-127 - -0和+0 - 127,共256個資料。
在原碼和反碼中,資料的區間為-127 - -0和+0 - 127;在補碼裡面用-128代替了原碼和反碼裡的-0,補碼範圍變成了-128 - 0 - 127。
補碼裡面用-128代替了原碼和反碼裡的-0產生了什麼
原碼和反碼裡面:[-0] = [1000 0000]原 = [1111 1111]反 = [1000 0000]補
補碼裡面:-128代替上面的[-0]**********>[-128] = [1000 0000]補,但-128並沒有原碼和反碼表示。
(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補 = -128
五.補碼的設計目的
使符號位能與有效值部分一起參加運算,從而簡化運算規則。
使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。
六.補碼的原理分析
見參考文章
同時感謝參考文章。
計算機組成原理學習(二)原碼,反碼,補碼
資料在計算機中以二進位制串儲存,這種01序列叫 機器數 每個機器數都有對應的值,比如0001換算就是現實裡十進位制的1,這個值叫它的 真值 1.原碼 為了表示負數的前面的符號,一種辦法是採用 最高一位表示符號而非數值 的編碼方式 原碼。如八位的運算器,機器數0000 0001的真值為1,1000 0...
計算機組成原理 原碼 反碼 補碼 移碼
原碼 正數的原碼 反碼 補碼 都相同,負數的原碼 符合位為1 其他位和正數原碼相同 負數的反碼 符號位不變 數值為 按位取反 負數的補碼 負數反碼 1 對乙個數做 取補運算 對該數各位 含符號位 取反 然後在末位 1 補碼性質 對 y 補 作取補運算可得 y 補。對 y 補 作取補運算可得 y 補。...
計算機組成原理 原碼 反碼和補碼
機器字長 暫存器的位數 計算機的數均存放於暫存器中 若機器字長為16位 有符號數的範圍為 2 15 2 15 1 注意 2 15在原碼中是無法表示的,但在計算機儲存的補碼形式可以表示 無符號數的範圍為0 2 16 1 用0表示正號,用1表示負號 1100 真值 11100 機器數 原碼 x 1110...