1樓:匡金後方
原碼:一個整數,按照絕對值大小轉換成的二進位制數,稱為原碼。
比如00000000
00000000
00000000
00000101是5的
原碼。反碼:將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼。
取反操作指:原為1,得0;原為0,得1。(1變0;
0變1)
比如:將00000000
00000000
00000000
00000101每一位取反,得1111111111111111
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
111110101=
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
2樓:沙裡波特
帶符號數,有三種表示方法,即:原碼、反碼和補碼。
但是,在計算機系統中,數值一律用補碼來表示和儲存。
所以,在計算機系統中,原碼和反碼,都是不存在的。
使用補碼的意義:可以把減法或負數,轉換為加法運算。
從而簡化計算機的硬體。
=====================
補碼的概念,來自於:補數。
比如鐘錶,時針轉一圈,週期是 12 小時。
那麼,倒撥 3 小時,可以用正撥 9 小時代替。
9,就是-3 的補數。 計算方法:9 = 12-3。
同理,分針倒撥 x 分,可以用正撥(60-x)代替。
60,是分針的週期。
同理,三角函式的週期是 2π。那麼,
在-π/2 處的函式值,就與(2π-π/2)= +3π/2 處相同。
------------
使用兩位十進位制數:0~99,週期就是 一百。
那麼,減一,就可以用 +99 代替。
24-1 = 23
24 + 99 = (1) 23
捨棄進位,這兩種演算法,功能就是相同的。
於是,99 就是 -1 的補數。
其它負數的補數,可以按照下式來求:
補數 = 週期 + 負數
------------
計算機中使用二進位制,補數,就改稱為【補碼】。
八位二進位制是:0000 0000~1111 1111。
相當於十進位制:0~255, 週期就是 256。
那麼,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的補碼,就是 1111 1111 = 255。
同理:-2 的補碼,就是 1111 1110 = 254。
繼續:-3 的補碼,就是 1111 1101 = 253。
最後:-128 的補碼,就是 1000 0000 = 128。
負數補碼的計算公式:【 256 + 這個負數 】。
(式中的 256 = 2^8,是八位補碼的週期。)
正數,並不存在補碼。所以,也不用求補碼,直接運算即可。
(也有人亂說:正數本身就是補碼。)
------------
用計算機計算: 7-3 = 4。
計算機中,並沒有減法器,必須改用補碼相加。
豎式如下:
7 的補碼=0000 0111
-3的補碼=1111 1101
--相加-------------
得: (1)0000 0100= 4 的補碼
捨棄進位,只保留八位,結果完全正確。
------------
藉助於補碼,可以簡化計算機的硬體。
原碼和反碼,並沒有這種功能。
所以,在計算機中,根本就沒有它們。
它們都是什麼? 就不用關心了。
原碼、反碼和補碼錶示的規則分別是什麼?
3樓:沙裡波特
數字變成各種碼,見圖:
原碼和反碼,在計算機中,都是不存在的。
只有補碼,是實用的編碼。
其變換規律,可以自己摸索出來。
4樓:匿名使用者
一. 機器數和真值
在學習原碼, 反碼和補碼之前, 需要先了解機器數和真值的概念.
1、機器數
一個數在計算機中的二進位制表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用一個數的最高位存放符號, 正數為0, 負數為1.
比如,十進位制中的數 +3 ,計算機字長為8位,轉換成二進位制就是00000011。如果是 -3 ,就是 10000011 。
那麼,這裡的 00000011 和 10000011 就是機器數。
2、真值
因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 -3
而不是形式值131(10000011轉換成十進位制等於131)。所以,為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值。
例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1
二. 原碼, 反碼, 補碼的基礎概念和計算方法.
在探求為何機器要使用補碼之前, 讓我們先了解原碼, 反碼和補碼的概念.對於一個數, 計算機要使用一定的編碼方式進行儲存. 原碼, 反碼, 補碼是機器儲存一個具體數字的編碼方式.
1. 原碼
原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:
[1111 1111 , 0111 1111]
即[-127 , 127]
原碼是人腦最容易理解和計算的表示方式.
2. 反碼
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可見如果一個反碼錶示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.
3. 補碼
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
對於負數, 補碼錶示方式也是人腦無法直**出其數值的. 通常也需要轉換成原碼在計算其數值.
什麼是原碼、反碼、補碼?
5樓:京安嫻邸暢
1):補碼加法公式
[x+y]補
=[x]補
+[y]補
2):補碼減法公式
[x-y]補
=[x]補-[y]補
=[x]補
+[-y]補
其中:[-y]補稱為負補,求負補的辦法是:對補碼的每一位(包括符合位)求反,且未位加1.
6樓:沙裡波特
計算機中,只有補碼,沒有原碼反碼。
只要掌握了補碼,即可。
小數補碼的定義式:
[x]補 = x ; 0 ≤ x < 1[x]補 = 2+x ; -1 ≤ x < 0例如:x = + 0.010 1000, 則 [x]補 = 0010 1000。
x = -0.011 1000, 則 [x]補 = 1100 1000。
7樓:卓蕾逄蒼
1、原碼的定義
原碼錶示法是機器數的一種簡單的表示法。其符號位用0表示正號,用:表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼錶示可記作[x]原。
①小數原碼的定義
[x]原=x
0≤x<11-x
-1<x≤
0例如:
x=+0.1011
,[x]原=
01011
x=-0.1011
[x]原=
11011
②整數原碼的定義
[x]原=x
0≤x<2n
2n-x-2n
<x≤0
原碼錶示數的範圍與二進位制位數有關。當用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]補。
①小數補碼的定義
[x]補=x
0≤x<12+x
-1≤x<
0例如:
x=+0.1011,
[x]補=
01011
x=-0.1011,
[x]補=
10101
②整數補碼的定義
[x]補=x
0≤x<2n
2n+1+x-2n
≤x<0
補碼錶示數的範圍與二進位制位數有關。當採用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]反。
反碼通常作為求補過程的中間形式,即在一個負數的反碼的未位上加1,就得到了該負數的補碼。
①小數反碼的定義
[x]反=x
0≤x<1
2-2n-1-x-1<
x≤0例如:
x=+0.1011
[x]反=
01011
x=-0.1011
[x]反=
10100
②整數反碼的定義
[x]反=x
0≤x<2n
2n+1-1-x-2n
<x≤0
例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]原
原碼,反碼,補碼是什麼補碼,原碼,反碼什麼的。有什麼作用啊!
正數的原碼,補碼,反碼相同,先求原碼,因為正數的原碼就是他的真值。負數的原碼是在正數的原碼基礎上,最高位置1,即符號位。然後再求反碼 符號位1不變,後面的所有位取反,然後再求補碼 在反碼的基礎上,末尾加1 注意負數的反碼,補碼除了符號位外也不是該負數的真值,而是原碼的除了最高位後面的數是真值的絕對值...
1的原碼,補碼,反碼是什麼0,1,1的原碼反碼補碼是什麼?8位二進位制整數
1 原碼錶示法 原碼錶示法是機器數的一種簡單的表示法。其符號位用0表示正號,用 表示負號,數值一般用二進位制形式表示。設有一數為x,則原碼錶示可記作 x 原。例如,x1 1010110 x2 一1001010 其原碼記作 x1 原 1010110 原 01010110 x2 原 1001010 原 ...
原碼,反碼,補碼及移碼存在的意義
反碼 解決負數加法運算問題,將減法運算轉換為加法運算,從而簡化運算規則 補碼 解決負數加法運算正負零問題,彌補了反碼的不足。總之,反碼與補碼都是為了解決負數運算問題,跟正數沒關係,因此,不管是正整數還是正小數,原碼,反碼,補碼都全部相同。總結 1 正數的原碼 補碼 反碼均為其本身 2 負數 二進位制...