當前位置:首頁 » 操作系統 » 位源碼和補碼

位源碼和補碼

發布時間: 2022-05-13 04:15:01

Ⅰ 原碼和補碼是什麼意思

原碼,沒有任何意義。

補碼具有:用正數代替負數,把減法變成加法運算的功能。

這樣,計算機中,只需用一個加法器,便可進行加減運算了。

所以,在計算機中,只是使用補碼。根本就不用原碼和反碼。

對於鍾表,倒撥 4 小時,可用正撥 8 小時代替。

對於十進制數,減一,可以用 +99 代替。

比如:24-1 = 23

24 + 99 = (1) 23

忽略進位,只取低兩位,結果就是相同的。

這里用來代替負數的正數,就叫做「補數」。

計算機用二進制,就叫做「補碼」。

正數,直接運算即可,不用求補碼。

負數的補碼是:模+該負數。

八位二進制的模是:2 的 8 次方=256。

-1 的補碼,就是:256-1 =255 = 1111 1111(二進制)。

-2 的補碼,就是:256-2 =254 = 1111 1110(二進制)。

。。。。。。

-128 的補碼,就是:256-128 =128 = 1000 0000(二進制)。

求補碼,用公式就可得出,並不需要繞道原碼反碼符號位。

Ⅱ 原碼、反碼、補碼

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

(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

Ⅲ 計算機如何區別原碼與補碼

使用補碼的意義在於:可把負數變正數,可把減法變加法。

從這個實用性來講,計算機中,只是用補碼。原碼根本就不存在。

-------

計算機,是執行程序的。程序,都是由人,編寫的。

所以,不是計算機來區別原碼、補碼。

而是由人,來區別。

-------

如果限定,只是使用兩位十進制數 0~99,共有一百個。

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

24 - 1 = 23

24 + 99 = (1) 23

只保留兩位,忽略進位,結果就是相同的。

99,就稱為-1 的補數。

-------

看到了嗎?出現了進位。

如果你忽略了進位,實際上就是減法運算!

--這時,99 就是補數,是當做-1 來用的。

如果不忽略進位,結果就是 1 百 23,這還是加法運算。

--此時,99,就是正常的數字。

。。。。。。

一個代碼,到底是原來的數字,還是代表負數?

就看你怎麼對待它了。

這些都是由編程人,來決定。

計算機,它才不管這些。

Ⅳ 原碼、反碼、補碼的基本概念

原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。
比如
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

Ⅳ 電腦中原碼和補碼是什麼關系

原碼,反碼,補碼是機器存儲一個具體數字的編碼方式。原碼跟補碼之間的關系是:正數的補碼與原碼相同,負數的補碼為 其原碼除符號位外所有位取反(得到反碼了),然後最低位加1。

在計算機系統中,數值一律用補碼來表示和存儲。使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。

原碼不能直接參加運算,可能會出錯。例如數學上,1+(-1)=0,而在二進制中00000001+

10000001=10000010,換算成十進制為-2。


(5)位源碼和補碼擴展閱讀

原碼是有符號數的最簡單的編碼方式,便於輸入輸出,但作為代碼加減運算時較為復雜。一個字長為n的機器數能表示不同的數字的個數是固定的2^n個,n=8時2^n=256;

用來表示有符號數,數的范圍就是 -2^(n-1) ~ 2^(n-1)-1,n=8時,這個范圍就是 -128 ~ +127。但是在不需要考慮數的正負時,就不需要用一位來表示符號位,n位機器數全部用來表示是數值,這時表示數的范圍就是0~2^n-1,n=8時這個范圍就是0~255.沒有符號位的數,稱為無符號數。

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

作用如下:

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

2、原碼:可直觀反映出數據的大小。

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

(6)位源碼和補碼擴展閱讀

在計算機內,定點數有3種表示法:原碼、反碼和補碼。

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

表示方法:

1、原碼的表示:在數值前直接加一符號位的表示法。

2、反碼的表示:

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

(2)、負數:負數的反碼,符號位為「1」,數值部分按位取反。

3、補碼的表示:

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

(2)、負數:負數的補碼則是符號位為「1」。並且,這個「1」既是符號位,也是數值位。數值部分按位取反後再在末位(最低位)加1。也就是「反碼+1」。

Ⅶ 原碼和補碼的表示範圍

如果是n=8位二進制:
原碼范圍:-127~+127,寫成16進制為FEH~7FH
補碼范圍:-128~+127,寫成16進制為FFH~7FH
如果是n=16位二進制:
原碼范圍:-32767~+32767,補碼范圍:-32768~+32767
如果是n=32位二進制:
原碼范圍:- 2 32-1 –1~+ 2 32-1 –1 ,補碼范圍:- 2 32-1 –1~+ 2 32-1 –1

原碼公式:- 2 n-1 –1~+ 2 n-1 –1
補碼公式:- 2 n-1 ~+ 2 n-1 –1
(公式中的n-1是指數)

Ⅷ 什麼是原碼,補碼和反碼

正負數,在計算機中,只是用【補碼】來存儲。

而原碼和反碼,在計算機中,並不存在。

下面按照八位二進制來說明補碼的意義。

十進制數 0,存放形式,就是二進制 0000 0000。

十進制數 +1,就加上 1,二進制是 0000 0001。

十進制數 +2,就再加 1,二進制是 0000 0010。

。。。

十進制數 +127,加 1加 1...,就加到了 0111 1111。

+127,這就是最大數值。

----------

負數怎麼辦?你就從 0,依次遞減吧。

十進制數 0,以二進制 0000 0000 存放。

十進制數 -1,就減去 1,得 1111 1111 = 255(十進制)。

十進制數 -2,就再減 1,得 1111 1110 = 254。

十進制數 -3,就再減 1,得 1111 1101 = 253。

。。。

十進制數 -128,減 1減 1...,得 1000 0000 = 128。

不要再減了,這就是最小值了。

(你再繼續減,就是 0111 1111,這就是+127 了。)

因此,最小數值就是-128。

----------

總結:

零和正數:直接用二進制存放。

負數:存放形式是【256+這個負數】。

這套存放格式,就是所謂的【補碼】。

求【補碼】,就是這么簡單。

完全不用繞到「原碼反碼符號位」那麼遠。

可以用十進制來計算。如果需要二進制,你就再轉換一下。

用這個方法,不涉及原碼反碼符號位,就少了不少麻煩事。

----------

為什麼負數用補碼存儲?

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

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

例如,6-2 = 4,在計算機中,用補碼代替數字,運算如下:

6 的補碼是 0000 0110

+-2 的補碼是 1111 1110

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

(1)0000 0100 (= 4 的補碼)

(括弧中的 1,是進位,舍棄不要了。)

注意:

如果運算結果超出了-128~+127 的范圍,結果將是錯的。

這種現象稱為「溢出」。

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

---------

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

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

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

Ⅸ 原碼,反碼,補碼的編碼規則

計算機中,並沒有原碼和反碼。

正負數據,在計算機中,只是以補碼存放的。

==============

下面以八位二進制來說明補碼的編碼規則。

八位二進制,共有 256 個補碼。

數字 0,就是以 0000 0000 存放。

數字 1,就是加上 1,得 0000 0001。

其它,繼續加,就行了。

數字 127,就是 0111 1111。

以上就是 0~127 的補碼。

==============

負數,遞減就行了。

數字-1,就從 0,減去一,即:

0000 0000-1 = (借位 1) 1111 1111。

只保留八位,就是 1111 1111(十進制 255)。

數字-2,就再減一,得:1111 1110(= 254)。

數字-3,就再減一,得:1111 1101(= 253)。

其它,繼續減,即可... ...

數字-128,最後就得到:1000 0000(= 128)。

以上這些,就是-1~-128 的補碼。

==============

計算公式:

負數的補碼=【256+該負數】

正數的補碼,就是正數本身

(如果需要二進制,你自己再變換。)

八位補碼可以表示:-128~+127。

==============

用補碼代替負數,就可以把減法,轉換為加法運算。

因此,計算機只要有一個加法器,就夠用了。

例如: 7-3 = 4。

用補碼的計算過程如下:

7 的補碼=0000 0111

-3的補碼=1111 1101

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

得:(1)0000 0100= 4 的補碼

舍棄進位,只保留八位作為結果,就是 4。

這就用加法,解決了負數以及減法的問題。

------

原碼和反碼,並沒有這些功能。

所以,在計算機中,根本就沒有原碼和反碼。

所謂的「取反加一」,由誰算呢?

計算機,可不做這些事。

Ⅹ 原碼與補碼的轉換

1、首先要知道,換算規則:原碼轉換為反碼:符號位不變,數值位分別「按位取反」 。

熱點內容
集群伺服器地址都是一樣的嗎 發布:2024-10-10 01:07:39 瀏覽:325
java怎麼開平方 發布:2024-10-10 01:02:25 瀏覽:486
windowsserver更新伺服器搭建 發布:2024-10-10 00:42:32 瀏覽:657
kz解壓縮 發布:2024-10-10 00:27:19 瀏覽:668
方舟編譯器呢 發布:2024-10-10 00:13:41 瀏覽:914
阿里雲伺服器安裝圖形 發布:2024-10-09 23:40:45 瀏覽:863
cb編譯器怎麼下 發布:2024-10-09 23:37:38 瀏覽:8
編譯translation 發布:2024-10-09 23:24:23 瀏覽:10
伺服器cpu能供多少電腦使用 發布:2024-10-09 23:05:21 瀏覽:352
演算法和嵌入式 發布:2024-10-09 23:04:34 瀏覽:557