什麼是補碼,什麼叫做補碼?

時間 2022-02-12 08:00:14

1樓:沙里波特

正負數字,存放在計算機中,就稱為:補碼。

正數,就直接以二進位制存放。

負數,則需要變換一下,再存放。

如果,僅使用兩位十進位制數,就是 00~99,共有 100 個數字。

減一,就可以用 +99 代替:

28 - 1 = 27

28 + 99 = (1) 27

忽略進製,結果就是相同的。

於是,99,就是-1 的補數;

同理,98,就是-1 的補數;

利用【補數】,就可把「相減」運算,改為「相加」。

利用【補數】,就可把「負數」改為「正數」。

對於「-1」,其對應的【補數】就是:100-1 = 99。

計算機中,沒有數字。1 和 0,都是**。

八位二進位制**,稱為乙個位元組。

0000 0000~1111 1111,共有 256 個**。

-1,就可以用 256- 1 = 255 (=1111 1111) 代替,

-2,就可以用 256- 2 = 254 (=1111 1110) 代替,

那麼,1111 1111 就稱為-1 的補碼;

同理,1111 1110 也就是-2 的補碼。

計算機中,只有加法器,沒有減法器。

做減法運算,必須使用【補碼】,用加法來操作。

補碼的定義式,如下:

正數的補碼,就是該數字本身。

負數的補碼,就用「模」,加上該負數,即可。

求補碼,並不需要學習「原碼反碼符號位 」這些垃圾知識。

2樓:孟雨蘭

補碼補碼舉例 1、在計算機系統中,數值一律用補碼來表示(儲存)。

主要原因:使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補

碼表示的數相加時,如果最高位(符號位)有進製,則進製被捨棄。

2、補碼與原碼的轉換過程幾乎是相同的。

數值的補碼表示也分兩種情況:

(1)正數的補碼:與原碼相同。

例如,+9的補碼是00001001。

(2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。

例如,-7的補碼:因為是負數,則符號位為「1」,整個為10000111;其餘7位為-7的絕對值+7的原碼

0000111按位取反為1111000;再加1,所以-7的補碼是11111001。

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

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

(2)如果補碼的符號位為「1」,表示是乙個負數,求原碼的操作可以是:符號位為1,其餘各位取

反,然後再整個數加1。

例如,已知乙個補碼為11111001,則原碼是10000111(-7):因為符號位為「1」,表示是乙個負

數,所以該位不變,仍為「1」;其餘7位1111001取反後為0000110;再加1,所以是10000111。

在「閒扯原碼、反碼、補碼」檔案中,沒有提到乙個很重要的概念「模」。我在這裡稍微介紹一下「模」

的概念:

「模」是指乙個計量系統的計數範圍。如時鐘等。計算機也可以看成乙個計量機器,它也有乙個計量範

圍,即都存在乙個「模」。例如:

時鐘的計量範圍是0~11,模=12。

表示n位的計算機計量範圍是0~2^(n)-1,模=2^(n)。

「模」實質上是計量器產生「溢位」的量,它的值在計量器上表示不出來,計量器上只能表示出模的

餘數。任何有模的計量器,均可化減法為加法運算。

例如: 假設當前時針指向10點,而準確時間是6點,調整時間可有以下兩種撥法:

一種是倒撥4小時,即:10-4=6

另一種是順撥8小時:10+8=12+6=6

在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。

對「模」而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特

性。共同的特點是兩者相加等於模。

對於計算機,其概念和方法完全一樣。n位計算機,設n=8, 所能表示的最大數是11111111,若再

加1稱為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進位制系統的

模為2^8。 在這樣的系統中減法問題也可以化成加法問題,只需把減數用相應的補數表示就可以

了。把補數用到計算機對數的處理上,就是補碼。

另外兩個概念

一的補碼(one's complement) 指的是正數=原碼,負數=反碼

而二的補碼(two's complement) 指的就是通常所指的補碼。

這裡補充補碼的代數加減運算:

1、補碼加法

[x+y]補 = [x]補 + [y]補

x=+0110011,y=-0101001,求[x+y]補

[x]補=00110011 [y]補=11010111

[x+y]補 = [x]補 + [y]補 = 00110011+11010111=00001010

注:因為計算機中運算器的位長是固定的,上述運算中產生的最高位進製將丟掉,所以結果不是

100001010,而是00001010。

2、補碼減法

[x-y]補 = [x]補 - [y]補 = [x]補 + [-y]補

其中[-y]補稱為負補,求負補的方法是:對補碼的每一位(包括符號位)求反,最後末位加「1」。

這裡補充補碼的代數解釋:

任何乙個數都可以表示為-a=2^(n-1)-2^(n-1)-a;

這個假設a為正數,那麼-a就是負數。而根據二進位制轉十進位制數的方法,我們可以把a表示為:a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)

這裡k0,k1,k2,k(n-2)是1或者0,而且這裡設a的二進位制位數為n位,即其模為2^(n-1),而2^(n-1)其二項是:1+2^0+2^1+2^2+……+2^(n-2),而式子:-a=2^(n-1)-2^(n-1)-a中,2^(n-1)-a代入a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)和2^(n-1)=1+2^0+2^1+2^2+……+2^(n-2)兩式,2^(n-1)-a=(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n-3)+……+(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^0+1,而這步轉化正是取反再加1的規則的代數原理所在。

因為這裡k0,k1,k2,k3……不是0就是1,所以1-k0,1-k1,1-k2的運算就是二進位制下的取反,而為什麼要加1,追溯起來就是2^(n-1)的二項式最後還有一項1的緣故。而-a=2^(n-1)-2^(n-1)-a中,還有-2^(n-1)這項未解釋,這項就是補碼裡首位的1,首位1在轉化為十進位制時要乘上2^(n-1),這正是n位二進位制的模。

不能貼公式,所以看起來很麻煩,如果寫成代數式子看起來是很方便的。

注:n位二進位制,最高位為符號位,因此表示的數值範圍-2^(n-1) ——2^(n-1) -1,所以模為2^(n-1)。上面提到的8位二進位製模為2^8是因為最高位非符號位,表示的數值範圍為0——2^8-1。

什麼叫做補碼?

3樓:

補碼是用來解決負數在計算機中的表示問題的。正數的補碼就是其本身;負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)。

例:1-1 = 1+(-1) = 00000001(原碼) + 100000001(原碼) =00000001(反碼) +11111110(反碼)  = 11111111(反碼)=10000000(原碼) = -0

用反碼運算時,結果為-0,雖然+0和-0都是0,但是看起來總是覺得怪怪的,何況0帶符號沒有任何意義,並且出現了兩個能表示0的二進位制數00000000和10000000。

這讓嚴謹的程式設計師們如何能接受,為了消除歧義,於是出現了反碼。

擴充套件資料

補碼這個編碼方案要解決的是如何在機器中表示負數,其本質意義為用乙個正數來表示這個正數對應的負數。所謂-20的補碼是指:如何在機器中用補碼形式表示-20。

具體過程是這樣的:將20的二進位制形式直接寫出00010100,然後所有位取反變成11101011,再加1變成了11101100。最簡單的補碼轉換方式,不必去理會轉換過程中的符號位,只關注轉換前和最終轉換後的符號位就行。

補碼的總前提是機器數,不要忘了機器數的符號位含義,最高位為0表示正數,最高位為1表示負數,而最高位是指機器字長的最左邊一位。位元組數100b,最高位為00000100中的最左邊的0。

4樓:沙里波特

補碼,應該是最容易理解的知識了。

小學生都可以自己摸索出來。

按照四位二進位制來說,共有 16 組**。

數字 0 的二進位制,就是 0000,

數字 1 的二進位制,就是 0001,

數字 7 的二進位制,就是 0111。

可見下表:

零和正數的補碼

負數怎麼辦?

就從 0000,依次向下減,就行了。那麼:

數字-1 的二進位制,就是 0000-1 = (1) 1111 = 15(十進位制)。

(括號中的 1,是借位,捨棄不要了。)

數字-2 的二進位制,就是 1111-1 = 1110 = 14。

數字-3 的二進位制,就是 1110-1 = 1101 = 13。

數字-8 的二進位制,就是 1000 = 8(十進位制)。

(別再減了。再減,就是 0111 = +7 了。)

可見下表:

負數的補碼

綜合到一起,就是-8~+7 的四位補碼。見下表:

四位補碼

總結:

零和正數的補碼,就是數字本身(也可轉為二進位制)。

負數的補碼,就是: 16+這個負數。

(如果是 8 位二進位制,就改用: 256 + 這個負數。)

整個推算過程,並不需要使用「原碼反碼符號位」這些垃圾。

計算時,使用十進位制,簡單方便。得出的補碼,當然也是十進位制。

如果需要二進位制,就變換一下。

補碼,很難嗎?

如果不涉及原碼反碼符號位,就一點也不難。

-----------

補碼有什麼用呢?

利用補碼,可以把減法運算,轉換成加法。

(所以,在計算機中,有乙個加法器,就夠用了。)

例如:6-2 = 4,用補碼運算如下:

6 的補碼是 0110、-2 的補碼是 1110。

0110 + 1110 = (1) 0100 (= 4 的補碼)

(括號中的 1,是進製,捨棄不要了。)

注意:

如果運算結果超出了-8~+7 的範圍,結果將是錯的。

這種現象稱為「溢位」。

再注意一下:進製,並不等於溢位。

---------

因為補碼的這個特性,所以,在計算機中,只是使用補碼存放資料。

原碼反碼,在計算機中,都是不存在的。

原碼反碼的用途,只是用於「筆算」。

其實,筆算的方法,並非只有「取反加一」。

原碼反碼,只是磚家為了增加收入,瞎編的垃圾而已。

所以,大家,完全不必在原碼反碼 上浪費時間精力。

但是,考試怎麼辦?

呃 ...,千萬別跟老師較勁,他怎麼講,你就怎麼答吧。

什麼是補碼,如何轉換反碼 補碼 原碼?

原碼 補碼 反碼之間是怎樣轉換的?一 正整數的原碼 反碼 補碼完全一樣,即符號位固定為0,數值位相同。二 負整數的符號位固定為1,由原碼變為補碼時,規則如下 1 原碼符號位1不變,整數的每一位二進位制數字求反,得到反碼。2 反碼符號位1不變,反碼數值位最低位加1,得到補碼。方法 1 正整數的原碼,反...

原碼求補碼是卻加一為什麼補碼求原碼也是卻

按原碼變補碼的規則,補碼變原碼應該是 減1取反 可是對於二進位制,減1取反 和 取反加1 的效果是一樣的,所以補碼的補碼就是原碼 原碼 true form 是一種計算機中對數字的二進位制定點表示方法。原碼錶示法在數值前面增加了一位符號位 即最高位為符號位 正數該位為0,負數該位為1 0有兩種表示 0...

8的補碼是多少為什麼 1的反碼是

樓主你好,我們先來看看反碼的概念,簡單的說,正數的反碼與原始碼一致,負數的反碼符號位不變,其他位按位取反.0可以理解為正,也可以理解為負,所以有兩種表示.你說 1的反碼是 126,這是用8位2進製來表示乙個數.第一位表示符號位,1換算成2進製為10000001,根據反碼的規則,它的反碼為111111...