原碼,反碼,補碼及移碼存在的意義

2021-03-12 16:08:03 字數 5887 閱讀 7982

1樓:du瓶邪

反碼:解決負數加法運算問題,將減法運算轉換為加法運算,從而簡化運算規則;

補碼:解決負數加法運算正負零問題,彌補了反碼的不足。

總之,反碼與補碼都是為了解決負數運算問題,跟正數沒關係,因此,不管是正整數還是正小數,原碼,反碼,補碼都全部相同。

總結:1、正數的原碼、補碼、反碼均為其本身;

2、負數(二進位制)的原碼、補碼、反碼公式:

反碼 = 原碼(除符號位外)每位取反

補碼 = 反碼 + 1

反碼 = 補碼 - 1

移碼 = 補碼符號位取反

2樓:入境無語

數值在計算機中表示形式為機器數,計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的是十進位制,"正如亞里士多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手指頭這個解剖學事實的結果.儘管在歷史上手指計數(5,10進位制)的實踐要比二或三進位制計數出現的晚."(摘自《數學發展史》有空大家可以看看哦~,很有意思的).

為了能方便的與二進位制轉換,就使用了十六進位制(2 4)和八進位制(23).下面進入正題.

數值有正負之分,計算機就用一個數的最高位存放符號(0為正,1為負).這就是機器數的原碼了.假設機器能處理的位數為8.即字長為1byte,原碼能表示數值的範圍為

(-127~-0 +0~127)共256個.

有了數值的表示方法就可以對數進行算術運算.但是很快就發現用帶符號位的原碼進行乘除運算時結果正確,而在加減運算的時候就出現了問題,如下: 假設字長為8bits

( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 顯然不正確.

因為在兩個整數的加法運算中是沒有問題的,於是就發現問題出現在帶符號位的負數身上,對除符號位外的其餘各位逐位取反就產生了反碼.反碼的取值空間和原碼相同且一一對應. 下面是反碼的減法運算:

( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10

(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有問題.

( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正確

問題出現在(+0)和(-0)上,在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進位制計數對人類文明的貢獻極大).

於是就引入了補碼概念. 負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在補碼中用(-128)代替了(-0),所以補碼的表示範圍為:

(-128~0~127)共256個.

注意:(-128)沒有相對應的原碼和反碼, (-128) = (10000000) 補碼的加減運算如下:

( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10

(00000001)補 + (11111111)補 = (00000000)補 = ( 0 ) 正確

( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10

(00000001) 補+ (11111110) 補= (11111111)補 = ( -1 ) 正確

所以補碼的設計目的是:

⑴使符號位能與有效值部分一起參加運算,從而簡化運算規則.

⑵使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計

所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。

3樓:歧凌蝶肇戈

1011

原碼:01011

反碼:01011

//正數時,反碼=原碼

補碼:01011

//正數時,補碼=原碼

移碼:11011

//原數+10000

-1011

原碼:11011

反碼:10100

//負數時,反碼為原碼取反

補碼:10101

//負數時,補碼為原碼取反+1

移碼:00101

//原數+10000

0.1101

原碼:0.1101

反碼:0.1101

//正數時,反碼=原碼

補碼:0.1101

//正數時,補碼=原碼

移碼:1.1101

//原數+1

-0.1101

原碼:1.1101

反碼:1.0010

//負數時,反碼為原碼取反

補碼:1.0011

//負數時,補碼為原碼取反+1

移碼:0.0010

//原數+1

-1的原碼,反碼,補碼,移碼是什麼?

4樓:匿名使用者

原碼 1000 0001

反碼抄 1111 1110

補碼 1111 1111

移碼 0111 1111

我多內容了~

補碼相對於原碼、反碼可以多表示一個數,因為反碼和原碼中「0」有兩種表示方法,而補碼只有一種。

在小數情況下,「多表示一個數」表現出來就是能表示-1。

//這個內容因為比較重要,是個專業點的教材上都會作特別說明,還是要好好看書啊~~

5樓:突然很想哭之麥

你應該去參考微機原理

-1的原碼是10000001

-1的反碼是11111110

-1的補碼是10000010

我是按的8位機器數做的!!

移碼沒學過幫不上了……

6樓:匿名使用者

原碼 1000 0001

反碼 1111 1110

補碼 1111 1111

移碼 0111 1111

7樓:匿名使用者

原碼 1000 0001

反碼 1111 1110

補碼 1111 1111

8樓:匿名使用者

~~he ~~

原碼 1000 0001

反碼 1111 1110

補碼 1111 1111

移碼 0111 1111

二進位制數11010100的原碼,反碼,補碼和移碼是什麼?

9樓:匿名使用者

正數的原、反、補碼都一樣:0的原碼跟反碼都有兩個,因為這裡0被分為+0和-0。

二進位制數11010100 是負數:= -2^6-2^4-2^2[x]原=11010100

符號位不變,原碼的其他位按位取反:

[x]反=10101011

補碼在反碼的基礎上按照正常的加法運算加1

[x]補=10101100

移碼不論正負,將其補碼的符號位取反即可

[x]移=00101100

10樓:匿名使用者

帶符號的二進位制數的原碼,反碼和補碼的計算,符號位與數值位單獨運算.

如+11010100的原碼是0 11010100,反碼是0 00101011,補碼是0 00101100,移碼要看是左移還是右移,是帶符號移還是不帶符號移的情況再定

11樓:做而論道

沒有正負號該怎麼算??

----

沒有正負號,這不就是無符號數嗎?

這就直接用二進位制數了,沒有什麼碼的問題。

12樓:沙裡波特

二進位制數 1101 0100 的原碼,反碼,補碼和移碼是什麼?

我知道若是 +1101 0100 的原碼便是 0,1101 0100這邊沒有正負號該怎麼算?

--沒有符號,便是「無符號數」。

--無符號數,並沒有原碼反碼補碼這些囉嗦事。

--無符號數,直接就存放到計算機中,即可。

原碼,反碼,補碼和移碼: 原碼:1001101,反碼,補碼,移碼各是多少?

13樓:

解:首位數字表示正負不做變(1為負數,0為正數)

反碼:1110010(正數反碼等於原數,題中為負數,則除首位數對應取反)

補碼:1110011(得出反碼數基礎上末位加一)

移碼:0110011(補碼符號位第一位數字取反)

反碼是數值儲存的一種,多應用於系統環境設定,如linux平臺的目錄和檔案的預設許可權的設定umask,就是使用反碼原理。

補碼(2's ***plement)是一種用二進位制表示有號數的方法,也是一種將數字的正負號變號的方式。

移碼(又叫增碼)是符號位取反的補碼,一般用指數的移碼減去1來做浮點數的階碼,引入的目的是為了保證浮點數的機器零為全0。

補碼的設計目的是:

1.使符號位能與有效值部分一起參加運算,從而簡化運算規則.

2.使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計 所有這些轉換都是在計算機的最底層進行的,而在我們使用的彙編、c等其他高階語言中使用的都是原碼。

小數和分數的補碼:

1.十進位制分數補碼可以先將分子和分母分別表示成二進位制數,然後計算出二進位制小數,再按下面第三步的方法將求出小數的補碼形式。

2.十進位制小數的補碼也應該先將其轉換成二進位制小數,再按下面第三步的方法將求出小數的補碼形式。

14樓:大野瘦子

反碼:1,110010(除符號位以外,各位取反)補碼:1,110011(除符號位以外,各位取反,末位加一)移碼:

0,110011(對補碼符號位取反)注意:1、首先判斷原碼的正負,因為對於正數,其原碼、補碼反碼錶示形式相同(符號位為0,數值部分與真值相同)

2、對於反碼和補碼,要區別:已知[x補],求[-x補]的題目(連同符號位各位取反,末位加一)

15樓:匿名使用者

我們考試要考(權當練習):

原碼:1,001101

=>負數

=>反碼:1,110010(除符號位以外,各位取反)=>補碼:1,110011(除符號位以外,各位取反,末位加一)=>移碼:

0,110011(對補碼符號位取反)注意點:1,首先判斷原碼的正負,因為對於正數,其原碼、補碼反碼錶示形式相同(符號位為0,數值部分與真值相同)

2,對於反碼和補碼,要區別:已知[x補],求[-x補]的題目(連同符號位各位取反,末位加一)

16樓:一嘆

整數的三種碼都是一樣的,移碼的話就是加上2的n次方,負數反碼符號位不變其他位取反,補碼就是反碼再加上1。移碼加上2的n次方。

17樓:

反碼:1110010

補碼:1110011

移碼:0110011

對於負數的反碼是原碼符號位不變,其它位數取反;

補碼是反碼加一;

移碼就是在原有的補碼的基礎上對於符號取反。

18樓:合夏侯戎

這個你需要問專業人士了,不然沒人懂的的,這是***碼

19樓:匿名使用者

這是個負數,負數的反碼=它的原碼符號位不變,其他位取反。補碼=反碼+1。移碼我還沒學過,就不知道了

計算機組成原理:原碼,補碼,反碼,移碼之間的關係?

20樓:匿名使用者

所謂原碼就是二進位制定點表示法,即最高位為符號位,「0」表示正,「1」表示負,其餘位表示數值的大小。  反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

  補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

跪求詳細地講解下原碼,補碼,反碼,移碼該怎麼求,及他們之間的

計算機中,只是使用補碼存放正負數。補碼,與正負數一一對應。有一個公式供你直接轉換,不需要繞道原碼反碼。另外,移碼 補碼 偏移量。原碼反碼,在計算機中,都不存在。原碼 如果機器字長為n,那麼一個數的原碼就是用一個n位的二進位制數,其中最高位為符號位 正數為0,負數為1。剩下的n 1位表示概數的絕對值。...

原碼,反碼,補碼是什麼補碼,原碼,反碼什麼的。有什麼作用啊!

正數的原碼,補碼,反碼相同,先求原碼,因為正數的原碼就是他的真值。負數的原碼是在正數的原碼基礎上,最高位置1,即符號位。然後再求反碼 符號位1不變,後面的所有位取反,然後再求補碼 在反碼的基礎上,末尾加1 注意負數的反碼,補碼除了符號位外也不是該負數的真值,而是原碼的除了最高位後面的數是真值的絕對值...

原碼 反碼 補碼的基本概念,原碼 反碼和補碼錶示的規則分別是什麼?

原碼 一個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。比如00000000 00000000 00000000 00000101是5的 原碼。反碼 將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。取反操作指 原為1,得0 原為0,得1。1變0 0變1 比如 將00000000 ...