前言:學計算機的第乙個接觸的知識就是原碼反碼補碼,不自覺得會認為這個很簡單,但是現在讓你算乙個數的原碼反碼補碼真的會嗎?讓你算兩個補碼之和會算嗎?今天看計算機組成原理,書中又提到了這些知識,就順便總結一下.
一 原反補碼互相轉換:
乙個正整數,當用原碼,反碼,補碼表示時,符號位都為0,用二進位制表示的數字都相同,即三種表示方法一樣.
乙個負整數,當用原碼,反碼,補碼表示時,符號位都固定為1,原碼變為反碼和補碼的規則如下:
(1)原碼符號位1不變,後面的每一位二進位制數字求反得到反碼.
(2)反碼符號位為1不變,反碼數值位最低位加1,得到補碼.
舉個栗子:
x=+122,y=-122,求[x]原,[x]反,[x]補,[y]原,[y]反,[y]補
先轉化為二進位制:[x]原=01111010,[x]反=01111010,[x]補=01111010(正整數三個一樣)
[y]原=11111010,[y]反=10000101,[y]補=10000110
二 補碼加法:
[x]補+[y]補 = [x+y]補(mod 2^(n+1))
舉個栗子:
1.兩個正整數相加
x=+1001,y=+0101,求x+y
[x]補=01001,[y]補=00101,[x+y]補=01110
所以x+y=+1110
2.一正一負相加:
x=+1001,y=-0101,求x+y
[x]補=01001,[y]補=11011,[x+y]補=(1)00100
因為要在模2^(n+1)意義下相加,所以把進的1去掉即
[x+y]補=00100,x+y=+0100
補碼減法:(即加乙個負數)
x=+1001,y=+0101,求x-y
[x-y]補=[x]補+[-y]補=01001 + 11011 = (1)00100
同理把1捨去,得x-y=+0100
三 溢位概念
當我們算x=+1011,y=+1001,求x+y時
會得到先[x+y]補=10100,兩個正數相加得到負數,顯然不對,這種情況稱為正溢
這個時候得解決方法是:
雙符號位法,即把[x]補寫為001100,[y]補=001000,這樣得到得[x+y]補=010100
同理當兩個負數相加,也會有可能產生負溢,解決方法負數補碼前加11.
計算機基礎之 原碼,反碼,補碼
最近在處理discuz中帖子狀態時接觸到大學時學過的計算機基礎 誰說大學學過的真正工作時不會用到,打臉 在這裡記錄一下,重新複習下大學的計算機基礎。一 機器數與真值 眾所周知,計算機的世界是二進位制的世界,0,1代表萬物,我們代表乙個數字,同樣也是用0,1來組成,比如數字6用二進位制表示為 0000...
計算機基礎 原碼 補碼 反碼
最近工作中用到了,補碼的概念,發現這些概念腦子裡全糊了 翻出書簡單複習一下,歸納如下 首先我們討論的都是有符號數,第一位都是符號位 正0 負1 原碼 最簡單明瞭 x 1101 x原碼 0,1101 x 1101 x原碼 1,1101 這裡注意下原碼0有兩種表示法 0原碼 0,0 0原碼 1,0 補碼...
計算機 原碼 反碼 補碼
在計算機中,用補碼來表示數字,因為 1 這樣可以比較方便的表示0 保證0作為正數或者負數補碼都是00000000 2 計算時用補碼直接加減就是最終數值 符號位參與運算 1.原碼 原碼就是符號位加上真值的絕對值,即用第一位表示符號,其餘位表示值.比如如果是8位二進位制 1 原 0000 0001 1 ...