如何表示二進位制數的正負呢
通常採用的方法是在二進位制數的前面加一位符號位,符號位為0表示這個數是正數,符號位位1表示這個數字負數,這種形式的數就稱為原碼。
為什麼需要二進位制補碼
在做減法時,如果兩個數時用原碼表示的,則首先需要比較兩數絕對值的大小,然後以絕對值大的乙個數作為被減數、絕對值小的乙個作為減數,求出差值,並以絕對值大的乙個數的符號作為差值符號。不難看出這個操作過程比較麻煩,而且需要使用數值比較電路和減法運算電路。如果能用兩數的補碼相加代替上述的減法運算,那麼計算過程就無需使用數值比較電路和減法運算電路了,從而能使運算器的電路結構大為簡化。
那麼補碼是什麼呢?
因為原碼有正負之分,所以原碼對應的補碼也要分開二論:
對於有效數字(不包括符號位)位n位的二進位制數n,它的補碼
(n)comp表示方法為
即正數(當符號位為0時)的補碼與原碼相同,負數(符號位為1時)的補碼等於2的n次方減去n。符號位保持不變。
又回到了原來的問題
為了避免兩個原碼原碼做減法的時候使用到比較電路和減法運算電路,所以引入了補碼的概念,使用兩個原碼的補碼相加來代替相減,然後在求補碼的過程中(針對負數,符號位為1)又遇到了減法,繞一圈回來還是有減法運算。怎麼辦呢?所以這就是為什麼要引入反碼的原因!
為什麼需要二進位制反碼
反碼是什麼?
同樣,對於有效數字(不包括符號位)位n位的二進位制數n,它的反碼(n)inv表示方法為
由上式可知,當n為負數時,將等式變形可得(n)inv + n = 2的n次方-1,而2的n次方-1是n位全為1的二進位制數,所以只要將n中每一位的1改為0,0改為1就得到了n的反碼(n)inv。
所以,在n為負數時,結合補碼和反碼的公式就可以得出:補碼 = 反碼+1。現在兩原碼相減就變成這樣了:
原碼a-原碼b = 補碼a+補碼b = 反碼a+1 + 反碼b+1, 成功避免減法!附
在計算機中,運算器中只有加法器,即是只能做加法!那乘法、除法怎麼進行運算呢?喔!還有減法呢?請看前文如何用反碼避免減法。
言歸正傳,乘法 採用累加的方式,除法 採用累減的方式(用反碼做加法代替減法)。
二進位制原碼 反碼 補碼詳解
原碼 原碼是指將最高位作為符號位 0表示正,1表示負 其它數字位代表數值本身的絕對值的數字表示方式。例如 數字6 在計算機中原碼表示為 0 000 0110 其中,第乙個數字0是符號位,0表示正數,0 000110是數字6的二進位制資料表示。數字 6 在計算機中原碼表示為 1 000 0110 以上...
二進位制 真值 原碼 反碼 補碼
機器數 乙個數在計算機中二進位制的表示形式叫機器數,機器數是帶符號的 計算機使用最高位來表示符號位 負數為1 正數為0.假如計算機的字長為8位 那麼對於十進位制3的機器數表示為0000 0011 而對於 3的機器數表示為1000 0011。真值 由於機器數是帶符號的所以機器數的形式值就不等於實際的值...
java 二進位制原碼,反碼,補碼
強制型別轉換,用到原反補碼 就是二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。通過乙個位元組,也就是8個二進位制位表示 7和 7 0 符號位 0000111 1 符號位 0000111 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。正數的補...