怎麼求補碼的原碼

2021-09-02 07:45:55 字數 5847 閱讀 8209

1樓:橘子閃爍

已知一個數的補碼,求原碼的操作其實就是對該補碼再求補碼:

1、如果補碼的符號位為“0”,表示是一個正數,其原碼就是補碼。

2、如果補碼的符號位為“1”,表示是一個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

例如:已知一個補碼為11111001,則原碼是10000111(-7)。因為符號位為“1”,表示是一個負數,所以該位不變,仍為“1”。

其餘七位1111001取反後為0000110;再加1,所以是10000111。

2樓:狼道刀

以補碼10010110為例,有兩種計算方法求原碼:

演算法1:

補碼=原碼取反再加1的逆運算。

10010110是補碼,應先減去1變為反碼,得10010101;

由反碼取得原始碼即除符號位外其他為按位取反,得11101010,即十進位制數的-106。

演算法2:

負數補碼速演算法,由最低位(右)向高位(左)查詢到第一個1與符號位之間的所有數字按位取反的逆運算

10010110是補碼,符號位與最後一個1之間的所有數字按位取反,得11101010

擴充套件資料

計算機系統中的補碼和原碼:

在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

原碼(true form)是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:

+0和-0),其餘位表示數值的大小。原碼不能直接參加運算,可能會出錯。

例如數學上,1+(-1)=0,而在二進位制中00000001+10000001=10000010,換算成十進位制為-2。顯然出錯了。

3樓:炸毛什造

已知一個數的補碼,求原碼的操作分兩種情況:

(1)如果補碼的符號位為“0”,表示是一個正數,所以補碼就是該數的原碼。

(2)如果補碼的符號位為“1”,表示是一個負數,求原碼的操作可以是:符號位為1,其餘各位取反,然後再整個數加1。

例如,已知一個補碼為11111001,則原碼是10000111(-7):因為符號位為“1”,表示是一個負數,所以該位不變,仍為   “1”;其餘7位1111001取反後為0000110;再加1,所以是10000111。

4樓:美食藝術

補碼的運算:聽老師講解真值、原碼、反碼和補碼

5樓:

9碼的原始碼他們這些人馬,數值對比都是有很大的差距。

6樓:沙裡波特

對於二進位制數來說,取反加1、減1取反,結果是完全相同的。

所以,可以使用同樣的方法來做。

甚至,求補碼時,你也可以用“減1取反”,一點也沒毛病。

7樓:藍雨

補碼的補碼就是原碼!

帶符號數中只有負數的原碼反碼和補碼是不一樣的,正數的這些都是一樣的,涉及碼制轉換!

原碼求補碼是取反加1

補碼求原碼還是是取反加1(符號位除外)

8樓:匿名使用者

有符號數,最高位為1的話除最高位之外取反加1即為原始碼,正數不變

9樓:匿名使用者

如果是帶符號的數,那麼看它的最高位,如果是1,則是負數,符號位不變,減一後取反碼。

是正數就不變。它的補碼就是它的原始碼

原碼=補碼-1後的反碼

10樓:匿名使用者

就是對補碼求補碼,你可以試試!

一個數的原碼,反碼,補碼怎麼算

11樓:匿名使用者

數在計算機中是以二進位制形式表示的。

數分為有符號數和無符號數。

原碼、反碼、補碼都是有符號定點數的表示方法。

一個有符號定點數的最高位為符號位,0是正,1是副。

以下都以8位整數為例,

原碼就是這個數本身的二進位制形式。

例如0000001 就是+1

1000001 就是-1

正數的反碼和補碼都是和原碼相同。

負數的反碼是將其原碼除符號位之外的各位求反

[-3]反=[10000011]反=11111100

負數的補碼是將其原碼除符號位之外的各位求反之後在末位再加1。

[-3]補=[10000011]補=11111101

一個數和它的補碼是可逆的。

為什麼要設立補碼呢?

第一是為了能讓計算機執行減法:

[a-b]補=a補+(-b)補

第二個原因是為了統一正0和負0

正零:00000000

負零:10000000

這兩個數其實都是0,但他們的原碼卻有不同的表示。

但是他們的補碼是一樣的,都是00000000

特別注意,如果+1之後有進位的,要一直往前進位,包括符號位!(這和反碼是不同的!)

[10000000]補

=[10000000]反+1

=11111111+1

=(1)00000000

=00000000(最高位溢位了,符號位變成了0)

有人會問

10000000這個補碼錶示的哪個數的補碼呢?

其實這是一個規定,這個數表示的是-128

所以n位補碼能表示的範圍是

-2^(n-1)到2^(n-1)-1

比n位原碼能表示的數多一個

又例:1011

原碼:01011

反碼:01011 //正數時,反碼=原碼

補碼:01011 //正數時,補碼=原碼

-1011

原碼:11011

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

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

0.1101

原碼:0.1101

反碼:0.1101 //正數時,反碼=原碼

補碼:0.1101 //正數時,補碼=原碼

-0.1101

原碼:1.1101

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

補碼:1.0011 //負數時,補碼為原碼取反+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;進行補碼運算時,應注意所得結果不應超過補碼所能表示數的範圍。

12樓:湖海散人

首先,機器數是有上限的,以8位數為例,只有256個數可以處理,即00000000到11111111

如果只考慮自然數,那麼00000000~11111111對應0~255,就是二進位制表示。但是有的時候需要負數,怎麼辦呢?科學家想到,這256個數可以分成2組,讓0開頭的表示正數和0,1開頭的表示負數。

所以00000000~01111111依然對應0~127,但是10000000~11111111本該對應-0~-127, 0和-0是一回事,於是把-0當做-128 。這樣就用00000000~11111111表示了-128~127 。這就是【原碼】

補碼是為了計算方便而發明的。原始計算器只能做加法不能做減法,但是科學家發現,例如7+(-5)=2可以這樣算:7+(-5) = 7+(10000-5)-10000 = 10002 - 10000 = 2 。

這很奇怪,因為機器太傻,只能做加法,但是雖然不會減法,-10000還是很方便的,只要去掉開頭的1;用10000減也是很方便的,因為可以用9999減然後+1,而用9999減,只要把每一位用9減。這就彌補了不能做減法的不足。以10000為基準,我們說-5的補碼是9995,因為它們加上7後,一個是2,一個是10002,只相差一個最高位(有趣的是,計算機計算高位會溢位,比如對於8位計算,256或更大的數需要超過8位來表示,會因放不下被捨去,結果就完全相同了)。

均衡正負,補碼也是用00000000~11111111表示-128~127,正數部分照舊,但是用11111111表示-1,11111110表示-2,以此類推到-128,因為7+(-2)=5,7+11111110(即254)等於231,二進位制表示要9位:100000101,捨去第一位為00000101,就是5 。這就是【補碼】

反碼是為了方便計算補碼,提出的稱呼。十進位制每一位取反不就是用9999減麼?二進位制就是用11111111減,等價於取反(因為只有2個數字,而十進位制有10個)。

對於-128到0之間的數,比如-5,即-00000101,按位取反即可。但是原碼是把第一位當成符號的,所以你可以先寫成【自然二進位制表示】,然後全部取反。之所以有反碼,是因為反碼很好算(按位取反),然後+1就是補碼,因此充當了一箇中間角色。

原碼好看,補碼好用,反碼是中間步驟。

有符號數,補碼,反碼,原碼,0的原碼,補碼,反碼是什麼

定點數分為有符號數 signed 和無符號數 unsigned 其中,有符號數的表示方法有三種 原碼 反碼和補碼。反碼錶示法規定 正數的反碼與其原碼相同 負數的反碼是對其原碼逐位取反,但符號位除外。所謂原碼就是二進位制定點表示法,即最高位為符號位,0 表示正,1 表示負,其餘位表示數值的大小。反碼錶示...

原碼和補碼的表示範圍,8位二進位制原碼 補碼 反碼的表示範圍各是多少 怎麼算的?

如果是n 8位二進位制 原碼範圍 127 127,寫成16進製為feh 7fh補碼範圍 128 127,寫成16進製為ffh 7fh如果是n 16位二進位制 原碼範圍 32767 32767,補碼範圍 32768 32767 如果是n 32位二進位制 原碼範圍 232 1 1 2 32 1 1 補碼...

數的原碼,反碼,補碼怎麼算一個數的原碼,反碼,補碼怎麼算

數在計算機中是以二進位制形式表示的。數分為有符號數和無符號數。原碼 反碼 補碼都是有符號定點數的表示方法。一個有符號定點數的最高位為符號位,0是正,1是副。以下都以8位整數為例,原碼就是這個數本身的二進位制形式。例如0000001 就是 1 1000001 就是 1 正數的反碼和補碼都是和原碼相同。...