當前位置:首頁 » 服務存儲 » 機器數以補碼形式存儲嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

機器數以補碼形式存儲嗎

發布時間: 2022-08-06 14:51:25

㈠ 設寄存器位數為8位,機器數採用補碼形式(一位符號位),對應於十進制數-27,寄存器內是多少,怎麼算啊

對於十進制的數-27,在寄存器內是:1,1100101。

計算機存儲負數採用補碼的存儲形式,所以我們要先計算出-27的原碼形式:運用十進制轉二進制的方法轉為二進制形式為:1,0011011。然後再轉化為補碼,原碼轉化為補碼的方法為將原碼初符號位全部取反然後再加1。

所以得出存儲的補碼形式:1,0011011→1,1100100+1=1,1100101。

(1)機器數以補碼形式存儲嗎擴展閱讀:

補碼的性質:

以補碼定義式為基礎,沿數軸列出典型的真值、原碼與補碼表示,可清楚了解補碼的有關性質 。

1、在補碼表示中,最高位x0(符號位)表示數的正負,在形式上與原碼相同,即 0正 1負。但補碼的符號位是數值的一部分,由補碼定義式計算而得。例如,負小數補碼中為 x0為1,這個 1是真值X(負)加模 2後產生。

2、在補碼表示中,數 0隻有一種表示,[+0]補 =[-0]補 =0.000……0。

3、負數補碼表示的范圍比原碼稍寬,多一種數碼組合。對於定點數,若為純小數,表示範圍為:

-1~1-2^(-n),若為純整數,表示範圍為:-2^n~2^n-1。

原碼求補碼:

正數:

正整數的補碼是其二進製表示,與原碼相同。

例:+9的補碼是00001001。

負數:

求負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)後加1。

例:求-5的補碼。

-5對應帶符合位負數5(10000101)→除符號位外所有位取反(11111010)→加00000001(11111011)。

所以-5的補碼是11111011。

0的補碼:

數0的補碼表示是唯一的。

[+0]補=[+0]反=[+0]原=00000000。

[ -0]補=11111111+1=00000000。

參考資料來源:網路-補碼

㈡ 計算機里的數都是以補碼形式出現的嗎

1.計算機里的數都是補碼形式,因為CPU只會做加法,數的補碼形式就可以用加法實現減法運算,進而以加法完成所有的運算。至於數以什麼碼的形式輸入和輸出,編程人員是可以控制的。
2.計算機里數碼的位數是2的正整數次方,比如4位、8位、16位,因為CPU及周邊電路一旦製成,一次處理數據位數、匯流排位數、各種寄存器位數就都固定下來,都是2的正整數次方位,這樣選擇的理由很多,可參照有關資料了解。
3.一個8位的補碼數,它表示數的范圍是-128~+127,原碼表示數的范圍是-127~+127,反碼表示數的范圍是-127~+127,就是因為最高位是符號位,實際數位只有7 位。

㈢ 原碼、反碼、補碼

請我給你的詳解:原碼、補碼和反碼

(1)原碼表示法

原碼表示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進制形式表示。設有一數為x,則原碼表示可記作〔x〕原。

例如,X1= +1010110

X2= 一1001010

其原碼記作:

〔X1〕原=[+1010110]原=01010110

〔X2〕原=[-1001010]原=11001010

原碼表示數的范圍與二進制位數有關。當用8位二進制來表示小數原碼時,其表示範圍:

最大值為0.1111111,其真值約為(0.99)10

最小值為1.1111111,其真值約為(一0.99)10

當用8位二進制來表示整數原碼時,其表示範圍:

最大值為01111111,其真值為(127)10

最小值為11111111,其真值為(-127)10

在原碼表示法中,對0有兩種表示形式:

〔+0〕原=00000000

[-0] 原=10000000

(2)補碼表示法

機器數的補碼可由原碼得到。如果機器數是正數,則該機器數的補碼與原碼一樣;如果機器數是負數,則該機器數的補碼是對它的原碼(除符號位外)各位取反,並在未位加1而得到的。設有一數X,則X的補碼表示記作〔X〕補。

例如,[X1]=+1010110

[X2]= 一1001010

[X1]原=01010110

[X1]補=01010110

即 [X1]原=[X1]補=01010110

[X2] 原= 11001010

[X2] 補=10110101+1=10110110

補碼表示數的范圍與二進制位數有關。當採用8位二進製表示時,小數補碼的表示範圍:

最大為0.1111111,其真值為(0.99)10

最小為1.0000000,其真值為(一1)10

採用8位二進製表示時,整數補碼的表示範圍:

最大為01111111,其真值為(127)10

最小為10000000,其真值為(一128)10

在補碼表示法中,0隻有一種表示形式:

[+0]補=00000000

[+0]補=11111111+1=00000000(由於受設備字長的限制,最後的進位丟失)

所以有[+0]補=[+0]補=00000000

(3)反碼表示法

機器數的反碼可由原碼得到。如果機器數是正數,則該機器數的反碼與原碼一樣;如果機器數是負數,則該機器數的反碼是對它的原碼(符號位除外)各位取反而得到的。設有一數X,則X的反碼表示記作〔X〕反。

例如:X1= +1010110

X2= 一1001010

〔X1〕原=01010110

[X1]反=〔X1〕原=01010110

[X2]原=11001010

[X2]反=10110101

反碼通常作為求補過程的中間形式,即在一個負數的反碼的未位上加1,就得到了該負數的補碼。

例1. 已知[X]原=10011010,求[X]補。

分析如下:

由[X]原求[X]補的原則是:若機器數為正數,則[X]原=[X]補;若機器數為負數,則該機器數的補碼可對它的原碼(符號位除外)所有位求反,再在未位加1而得到。現給定的機器數為負數,故有[X]補=[X]原十1,即

[X]原=10011010

[X]反=11100101

十) 1

[X]補=11100110

例2. 已知[X]補=11100110,求〔X〕原。

分析如下:

對於機器數為正數,則〔X〕原=〔X〕補

對於機器數為負數,則有〔X〕原=〔〔X〕補〕補

現給定的為負數,故有:

〔X〕補=11100110

〔〔X〕補〕反=10011001

十) 1

〔〔X〕補〕補=10011010=〔X〕原

或者說:

數在計算機中是以二進制形式表示的。
數分為有符號數和無符號數。
原碼、反碼、補碼都是有符號定點數的表示方法。
一個有符號定點數的最高位為符號位,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。

假設有一 int 類型的數,值為5,那麼,我們知道它在計算機中表示為:
00000000 00000000 00000000 00000101
5轉換成二制是101,不過int類型的數佔用4位元組(32位),所以前面填了一堆0。
現在想知道,-5在計算機中如何表示?
在計算機中,負數以其正值的補碼形式表達。
什麼叫補碼呢?這得從原碼,反碼說起。

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。
比如 00000000 00000000 00000000 00000101 是 5的 原碼。
反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
取反操作指:原為1,得0;原為0,得1。(1變0; 0變1)
比如:將00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
稱:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反碼。
反碼是相互的,所以也可稱:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互為反碼。
補碼:反碼加1稱為補碼。
也就是說,要得到一個數的補碼,先得到反碼,然後將反碼加上1,所得數稱為補碼。
比如:00000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010。
那麼,補碼為:
11111111 11111111 11111111 11111010 1 = 11111111 11111111 11111111 11111011
所以,-5 在計算機中表達為:11111111 11111111 11111111 11111011。轉換為十六進制:0xFFFFFFFB。

再舉一例,我們來看整數-1在計算機中如何表示。
假設這也是一個int類型,那麼:
1、先取1的原碼:00000000 00000000 00000000 00000001
2、得反碼: 11111111 11111111 11111111 11111110
3、得補碼: 11111111 11111111 11111111 11111111

正數的原碼,補碼,反碼都相同,都等於它本身
負數的補碼是:符號位為1,其餘各位求反,末位加1
反碼是:符號位為1,其餘各位求反,但末位不加1
也就是說,反碼末位加上1就是補碼

1100110011 原
1011001100 反 除符號位,按位取反
1011001101 補 除符號位,按位取反再加1

正數的原反補是一樣的
在計算機中,數據是以補碼的形式存儲的:
在n位的機器數中,最高位為符號位,該位為零表示為正,為1表示為負;
其餘n-1位為數值位,各位的值可為0或1。

當真值為正時:原碼、反碼、補碼數值位完全相同;
當真值為負時: 原碼的數值位保持原樣,
反碼的數值位是原碼數值位的各位取反,
補碼則是反碼的最低位加一。
注意符號位不變。
如:若機器數是16位:
十進制數 17 的原碼、反碼與補碼均為: 0000000000010001
十進制數-17 的原碼、反碼與補碼分別為:1000000000010001、1111111111101110、1111111111101111

㈣ 既然計算機對數值的運算和存儲都是補碼形式,那無符號型數據沒有補碼,怎麼存儲的有點暈。

計算機對數值的運算和存儲都是以補碼形式(這句話沒毛病吧?)
--八位補碼,只有七位表示數值。
那無符號型數據是沒有補碼之說的,怎麼存儲?
--八位,都是數值,沒有正負號。

㈤ 為什麼數據在內存里是以補碼的形式存儲

數據在內存里是以補碼的形式存儲的原因有三點:

1、保證了0的唯一性,保證了數的表示的准確性。

2、讓加減可以統一處理,優化了數的運算過程。

3、解決了自身邏輯意義的完整性。

數據在內存里以補碼的形式存儲是為了簡化計算機的結構設計,同時也提高了運算速度。在計算機系統中,數值一律用補碼來表示和存儲。

(5)機器數以補碼形式存儲嗎擴展閱讀:

補碼的主要特性:

補碼為一個負整數(或原碼)與其補數(或補碼)相加,和為模。在補碼的運算中,對一個整數的補碼再求補碼,等於該整數自身。補碼的正零與負零表示方法相同。計算機底層不區分無符號數和補碼數,可認為其運算全部當作無符號數處理。

補碼使得符號位能與有效值部分一起參加運算,從而簡化運算規則。使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼。

參考資料來源:網路-補碼

㈥ 補碼二進制計算機為什麼要用補碼存儲整型,關於

補碼的功能,類似於:

時針倒撥 3 小時,與正撥 9 小時,效果相同。

利用這種思路,計算機中的負數,也可以改為正數(即補碼)。

同時,減法運算,也就可以用加法運算代替了。

那麼,藉助於補碼,就能統一加減法,夠簡化計算機的硬體。

十進制比較容易理解:

25 - 1 = 24

25 + 99 = (一百) 24。

只要忽略進位,+99 就能代替-1。

+99 就稱為-1 的補數。

在這里用了 2 位 10 進制。

求補數的演算法:補數 = 負數 + 10^2。

通用的公式是:補數 = 負數 + 10^n。n 是位數。

-----------------------

計算機用二進制,補數,就改名為:補碼。


一個位元組,是 8 位 2 進制。

計數范圍是:0000 0000 ~ 1111 1111(十進制 255)。

計數周期是:2^8 = 256。


求補碼的演算法:負數的補碼=負數+2^n。

那麼:

-1 的補碼=-1 + 256 = 255 = 1111 1111。

-2 的補碼=-2 + 256 = 254 = 1111 1110。

。。。


例如,7-2 = 5,用補碼計算如下:

7 =0000 0111

[-2] 補 =1111 1110

---相加------------

得:(1)0000 0101= 5

舍棄進位,結果就完全正確。

藉助於補碼,負數就沒有了,從而就把「減法轉換為加法運算」。

-----------------------

補碼的來源,與原碼反碼毫無關系。

「原碼反碼取反加一、符號位也能參加運算」...

這些,都沒有什麼理論依據。

從「原碼取反加一」開始學習補碼,就弄不清楚「為什麼用補碼」。

㈦ 既然計算機內部數據是以補碼存儲的,為什麼還要有原碼呢原碼和反碼存在的意義是什麼 初學者請教大家

在計算機系統中,數值,一律用補碼表示和存放。

補碼,就是一個代替負數運算的正數。

藉助於補碼,就是用正數代替負數來進行運算。

藉助於補碼(正數),減法,也就可用加法來代替。

正數,怎麼就能代替負數呢?

且看 2 位 10 進制:

24 - 1 = 23

24 + 99 = (一百) 23

只取兩位結果,舍棄進位,這兩種演算法,功能就是相同的。

此時,+99 就能當做-1 使用。

同理,+98 就能當做-2。

。。。

這些正數,就是負數的補數。

補數的定義式:補數 = 負數 + 10^2。

因此,藉助於補數,就能用加法來實現減法運算。

------------------

計算機用二進制,補數,就改稱:補碼。

8 位 2 進制,范圍是:0000 0000~1111 1111。

用十進制來說明,就是:0 ~ 255。

補碼的定義式,就是: 補碼 = 負數 + 2^8。

-1 的補碼:-1 + 2^8 = 255 ( = 1111 1111)。

-2 的補碼:-2 + 256 =254 ( = 1111 1110)。

。。。

-128 的補碼:-128 + 256 = 128 ( = 1000 0000)。

-----------------

藉助於補碼,可用加法來實現減法。

這樣就統一了加減法。由此就可以簡化計算機的硬體。

原碼、反碼,都沒有這種功能。

因此,原碼和反碼,都沒有任何存在的意義。

所以,在計算機中,並沒有原碼和反碼。數值,一律採用補碼表示和存儲。