1樓:匿名使用者
反碼 在計算機內,定點數有3種表示法:原碼、反碼和補碼。
所謂原碼就是前面所介紹的二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
1、原碼、反碼和補碼的表示方法
(1) 原碼:在數值前直接加一符號位的表示法。
例如: 符號位 數值位
[+7]原= 0 0000111 b
[-7]原= 1 0000111 b
注意:a. 數0的原碼有兩種形式:
[+0]原=00000000b [-0]原=10000000b
b. 8位二進位制原碼的表示範圍:-127~+127
(2)反碼:
正數:正數的反碼與原碼相同。
負數:負數的反碼,符號位為“1”,數值部分按位取反。
例如: 符號位 數值位
[+7]反= 0 0000111 b
[-7]反= 1 1111000 b
注意:a. 數0的反碼也有兩種形式,即
[+0]反=00000000b
[- 0]反=11111111b
b. 8位二進位制反碼的表示範圍:-127~+127
(3)補碼的表示方法
1)模的概念:把一個計量單位稱之為模或模數。例如,時鐘是以12進位制進行計數迴圈的,即以12為模。
在時鐘上,時針加上(正撥)12的整數位或減去(反撥)12的整數位,時針的位置不變。14點鐘在捨去模12後,成為(下午)2點鐘(14=14-12=2)。從0點出發逆時針撥10格即減去10小時,也可看成從0點出發順時針撥2格(加上2小時),即2點(0-10=-10=-10+12=2)。
因此,在模12的前提下,-10可對映為+2。由此可見,對於一個模數為12的迴圈系統來說,加2和減10的效果是一樣的;因此,在以12為模的系統中,凡是減10的運算都可以用加2來代替,這就把減法問題轉化成加法問題了(注:計算機的硬體結構中只有加法器,所以大部分的運算都必須最終轉換為加法)。
10和2對模12而言互為補數。
同理,計算機的運算部件與暫存器都有一定字長的限制(假設字長為8),因此它的運算也是一種模運算。當計數器計滿8位也就是256個數後會產生溢位,又從頭開始計數。產生溢位的量就是計數器的模,顯然,8位二進位制數,它的模數為28=256。
在計算中,兩個互補的數稱為“補碼”。
2)補碼的表示:
正數:正數的補碼和原碼相同。
負數:負數的補碼則是符號位為“1”,數值部分按位取反後再在末位(最低位)加1。也就是“反碼+1”。
例如: 符號位 數值位
[+7]補= 0 0000111 b
[-7]補= 1 1111001 b
補碼在微型機中是一種重要的編碼形式,請注意:
a. 採用補碼後,可以方便地將減法運算轉化成加法運算,運算過程得到簡化。正數的補碼即是它所表示的數的真值,而負數的補碼的數值部份卻不是它所表示的數的真值。
採用補碼進行運算,所得結果仍為補碼。
b. 與原碼、反碼不同,數值0的補碼只有一個,即 [0]補=00000000b。
c. 若字長為8位,則補碼所表示的範圍為-128~+127;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的範圍。
2.原碼、反碼和補碼之間的轉換
由於正數的原碼、補碼、反碼錶示方法均相同,不需轉換。
在此,僅以負數情況分析。
(1) 已知原碼,求補碼。
例:已知某數x的原碼為10110100b,試求x的補碼和反碼。
解:由[x]原=10110100b知,x為負數。求其反碼時,符號位不變,數值部分按位求反;求其補碼時,再在其反碼的末位加1。
1 0 1 1 0 1 0 0 原碼
1 1 0 0 1 0 1 1 反碼,符號位不變,數值位取反
1 +1
1 1 0 0 1 1 0 0 補碼
故:[x]補=11001100b,[x]反=11001011b。
(2) 已知補碼,求原碼。
分析:按照求負數補碼的逆過程,數值部分應是最低位減1,然後取反。但是對二進位制數來說,先減1後取反和先取反後加1得到的結果是一樣的,故仍可採用取反加1 有方法。
例:已知某數x的補碼11101110b,試求其原碼。
解:由[x]補=11101110b知,x為負數。求其原碼錶示時,符號位不變,數值部分按位求反,再在末位加1。
1 1 1 0 1 1 1 0 補碼
1 0 0 1 0 0 0 1 符號位不變,數值位取反
1 +1
1 0 0 1 0 0 1 0 原碼
1.3.2 有符號數運算時的溢位問題
請大家來做兩個題目:
兩正數相加怎麼變成了負數???
1)(+72)+(+98)=?
0 1 0 0 1 0 0 0 b +72
+ 0 1 1 0 0 0 1 0 b +98
1 0 1 0 1 0 1 0 b -42
兩負數相加怎麼會得出正數???
2)(-83)+(-80)=?
1 0 1 0 1 1 0 1 b -83
+ 1 0 1 1 0 0 0 0 b -80
0 1 0 1 1 1 0 1 b +93
思考:這兩個題目,按照正常的法則來運算,但結果顯然不正確,這是怎麼回事呢?
答案:這是因為發生了溢位。
如果計算機的字長為n位,n位二進位制數的最高位為符號位,其餘n-1位為數值位,採用補碼錶示法時,可表示的數x的範圍是 -2n-1≤x≤2n-1-1
當n=8時,可表示的有符號數的範圍為-128~+127。兩個有符號數進行加法運算時,如果運算結果超出可表示的有符號數的範圍時,就會發生溢位,使計算結果出錯。很顯然,溢位只能出現在兩個同符號數相加或兩個異符號數相減的情況下。
對於加法運算,如果次高位(數值部分最高位)形成進位加入最高位,而最高位(符號位)相加(包括次高位的進位)卻沒有進位輸出時,或者反過來,次高位沒有進位加入最高位,但最高位卻有進位輸出時,都將發生溢位。因為這兩種情況是:兩個正數相加,結果超出了範圍,形式上變成了負數;兩負數相加,結果超出了範圍,形式上變成了正數。
而對於減法運算,當次高位不需從最高位借位,但最高位卻需借位(正數減負數,差超出範圍),或者反過來,次高位需從最高位借位,但最高位不需借位(負數減正數,差超出範圍),也會出現溢位。
在計算機中,資料是以補碼的形式儲存的,所以補碼在c語言的教學中有比較重要的地位,而講解補碼必須涉及到原碼、反碼。本部分演示作何一個整數的原碼、反碼、補碼。過程與結果顯示在列表框中,結果比較少,不必自動清除,而過程是相同的,沒有必要清除。
故需設清除各部分及清除全部的按鈕。測試時注意最大、最小正負數。使用者使用時注意講解不會溢位:
當有一個數的反碼的全部位是1才會溢位,那麼它的原碼是10000...,它不是負數,故不會溢位。
在n位的機器數中,最高位為符號位,該位為零表示為正,為一表示為負;其餘n-1位為數值位,各位的值可為零或一。當真值為正時,原碼、反碼、補碼數值位完全相同;當真值為負時,原碼的數值位保持原樣,反碼的數值位是原碼數值位的各位取反,補碼則是反碼的最低位加一。注意符號位不變。
總結:提示資訊不要太少,可“某某數的反碼是某某”,而不是隻顯示數值。
1.原碼的求法:(1)對於正數,轉化為二進位制數,在最前面新增一符號位(這是規定的),用1表示負數,二表示正數.
如:0000 0000是一個位元組,其中0為符號位,表示是正數,其它七位表示二進位制的值.其實,機器不管這些,什麼符號位還是值,機器統統看作是值來計算.
正數的原碼、反碼、補碼是同一個數!
(2)對於負數,轉化為二進位制數,前面符號位為1.表示是負數.
計算原碼只要在轉化的二進位制數前面加上相應的符號位就行了.
2.反碼的求法:對於負數,將原碼各位取反,符號位不變.
3.補碼的求法:對於負數,將反碼加上二進位制的1即可,也就是反碼在最後一位上加上1就是補碼了.
2樓:沙裡波特
怎麼算?就按照二進位制數,計算,即可。
這有什麼難的?
樓主大概是想要問:
原碼,反碼,補碼,移碼,階碼怎麼求吧?
原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少?
3樓:
解:首位數字表示正負不做變(1為負數,0為正數)
反碼:1110010(正數反碼等於原數,題中為負數,則除首位數對應取反)
補碼:1110011(得出反碼數基礎上末位加一)
移碼:0110011(補碼符號位第一位數字取反)
反碼是數值儲存的一種,多應用於系統環境設定,如linux平臺的目錄和檔案的預設許可權的設定umask,就是使用反碼原理。
補碼(2's complement)是一種用二進位制表示有號數的方法,也是一種將數字的正負號變號的方式。
移碼(又叫增碼)是符號位取反的補碼,一般用指數的移碼減去1來做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。
補碼的設計目的是:
1.使符號位能與有效值部分一起參加運算,從而簡化運算規則.
2.使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。
小數和分數的補碼:
1.十進位制分數補碼可以先將分子和分母分別表示成二進位制數,然後計算出二進位制小數,再按下面第三步的方法將求出小數的補碼形式。
2.十進位制小數的補碼也應該先將其轉換成二進位制小數,再按下面第三步的方法將求出小數的補碼形式。
4樓:大野瘦子
反碼:1,110010(除符號位以外,各位取反)補碼:1,110011(除符號位以外,各位取反,末位加一)移碼:
0,110011(對補碼符號位取反)注意:1、首先判斷原碼的正負,因為對於正數,其原碼、補碼反碼錶示形式相同(符號位為0,數值部分與真值相同)
2、對於反碼和補碼,要區別:已知[x補],求[-x補]的題目(連同符號位各位取反,末位加一)
小數的原碼,反碼,補碼,負小數的原碼,補碼,反碼和移碼怎麼算,如 0 3125 10進製
公孫曜兒板妙 化為2進製是整數部分除以二知道變為1 小數部分乘以2直到變為1 符號位0表示正1表示負 正數 原碼 補碼 負數 原碼 正數部分 去掉負號 的二進位制值,且符號位 最左邊的位元位 為1反碼 正數部分 去掉負號 的二進位制值,按位取反補碼 反碼 1小數點依舊用點 定點數所謂定點數是指小數點...
原始碼反碼與補碼,原碼 反碼和補碼
8位2進製原碼反碼補碼表示法 第一位是符號位,正數為0負數為1 67的原碼是11000011,換成反碼符號位不變,其他各位依次求反 10111100,換成補碼只在反碼基礎上末位加1 55的原碼00110111,正數原碼反碼補碼相同。補碼實現55 67 00110111 把這個補碼末位減一,符號位不變...
請問計算機中補碼,原碼,反碼,移碼的定義以及各自的作用是什麼
宿夏青有華 上面那個是原碼,反碼就是把上面的1變0,0變1,補碼就是在反碼後在加上1.移碼就是整個的移位,你想移幾位就移幾位,比如110移後為100。這是右移,移動沒的就補上0 問工嶽熠 變程式設計的話,不需要多深的理解這幾個名詞的意思,這幾個算屬於計算機組成原理的範疇。這些都是資料的的二進位制形式...