『壹』 原碼,補碼,反碼的應用
計算機中,只有補碼,並沒有原碼和反碼。
藉助於補碼,負數和減法,都可以轉化成加法來進行運算。
那麼,計算機的硬體,就可以簡化了。
因此,在計算機中,只有加法器,並沒有減法器。
原碼和反碼,都沒有什麼用,也可以說,根本就沒有用!
------------------------
補碼是怎麼回事?這得從「補數」談起。
計算機所能計算的位數,是固定的,如八位機、16 位。。。
位數限定之後,就可以用「補數」代替負數,用加法實現減法運算。
如限定兩位十進制,-1,就可以用 +99 代替。
例如:
25 - 1 = 24
25 + 99 = (一百) 24
舍棄進位,只取兩位,這兩種演算法,功能就完全相同。
99,就是-1 的補數。計算公式:補數 = 一百+負數。
一百,是用兩位十進制數,循環計數的周期,10^2。
這個周期,在計算機專業,又稱為「模」。
-------------------------
計算機用二進制,補數,就改稱為:補碼。
八位二進制:0000 0000 ~ 1111 1111 (十進制 255)。
循環計數的周期,是:2^8 = 256。
求負數補碼的計算公式,也是: 周期 + 負數。
-1 補碼就是:256 + (-1) = 255 = 1111 1111(二進制)。
用不存在的「原碼反碼取反加一」來求,也是這個結果。
正數,不用轉換,直接參加運算。
也可以說:正數自身就是補碼。
-------------------------
舉例說明,如: 5 - 7 = -2。
用補碼計算的過程如下:
5 的補碼=0000 0101
-7的補碼=1111 1001
--相加-------------
得(1) 1111 1110 = -2 的補碼
舍棄進位,只保留八位,這就用加法,實現了 5-7。
『貳』 原碼,反碼,補碼怎麼解釋
正負數,在計算機中,只是用【補碼】來存儲。
而原碼和反碼,在計算機中,並不存在。
下面按照八位二進制來說明補碼的意義。
十進制數 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 的范圍,結果將是錯的。
這種現象稱為「溢出」。
再注意一下:進位,並不等於溢出。
---------
因為補碼的這個特性,所以,在計算機中,只是使用補碼存放數據。
而原碼反碼,在計算機中,都是不存在的。
所以,大家,完全不必在原碼反碼上浪費時間精力。
『叄』 一個數的原碼,反碼,補碼
在計算機中,並不存在原碼和反碼。
在計算機中,只用補碼表示正負數。
使用補碼的意義:可用加法,代替減法運算,從而簡化計算機硬體。
------
理解補碼,要先從補數開始。
時針轉一圈,周期是 12 小時。
倒撥 3 小時,就可以用正撥 9 小時代替。
9 就是-3 的補數。9 = 12-3。
同理,分針倒撥 X 分,也可以用正撥「60-X」代替。
60 是分針的周期。
三角函數的周期是 2π。
那麼,-π/2 和 +3π/2 處的函數值,必定是相同的。
所以,這正負兩個角度,也是可以互相替換的。
------
對於兩位十進制 0~99,周期就是一百。
這時,減一,你就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (1) 24
結果取兩位,舍棄進位。這兩種演算法,功能就是相同的。
99,就稱為-1 的補數。
98,就是-2 的補數。
。。。
其它補數,你自己都會求的。
利用補數,就可以用加法,代替減法運算。
補數怎麼求?
負數的補數 = 周期 + 該負數。
正數,不需要求補數。也可以說,本身就是補數。
------
計算機使用二進制,補數,就改稱:補碼。
八位二進制,共有 256 個數字。周期就是 256。
負數的補碼 = 256+該負數。
16位二進制,共有 2^16 個數字。周期就是 65536。
負數的補碼 = 65536+ 該負數。
正數,不需要做變換。或者說,正數本身就是補碼。
那麼,在八位二進制時:
-1 的補碼是:256-1 = 255 = 1111 1111(二進制)。
-2 的補碼是:254 = 1111 1110。
-3 的補碼是:253 = 1111 1101。
。。。
-128 補碼:128 = 1000 0000。
------
補碼的應用如: 7-3 = 4。
用補碼的計算過程如下:
7 的補碼=0000 0111
-3的補碼=1111 1101
--相加-------------
得:(1)0000 0100= 4 的補碼
舍棄進位,只保留八位,結果肯定正確。
------
有了補碼,計算機,僅需配置一個加法器即可。
而原碼和反碼,並沒有這種能力。
所以,在計算機中,並沒有原碼和反碼。
原碼和反碼,根本不存在。
它們都是多少呢?就不必關心了吧。
『肆』 計算機原碼反碼補碼怎麼算
計算機原碼反碼補碼計算方法:
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]補
對於負數,補碼表示方式也是人腦無法直觀看出其數值的。通常也需要轉換成原碼在計算其數值。
(4)利用加法器實現源碼轉化補碼擴展閱讀:
原碼,反碼和補碼是完全不同的。既然原碼才是被人腦直接識別並用於計算表示方式,為何還會有反碼和補碼呢?
首先,因為人腦可以知道第一位是符號位,在計算的時候我們會根據符號位,選擇對真值區域的加減。但是對於計算機,加減乘數已經是最基礎的運算,要設計的盡量簡單。計算機辨別"符號位"顯然會讓計算機的基礎電路設計變得十分復雜。於是人們想出了將符號位也參與運算的方法。我們知道,根據運演算法則減去一個正數等於加上一個負數,即: 1-1 = 1 + (-1) = 0 , 所以機器可以只有加法而沒有減法,這樣計算機運算的設計就更簡單了。
於是人們開始探索將符號位參與運算,並且只保留加法的方法。
『伍』 原碼,反碼,補碼的編碼規則
計算機中,並沒有原碼和反碼。
正負數據,在計算機中,只是以補碼存放的。
==============
下面以八位二進制來說明補碼的編碼規則。
八位二進制,共有 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。
這就用加法,解決了負數以及減法的問題。
------
原碼和反碼,並沒有這些功能。
所以,在計算機中,根本就沒有原碼和反碼。
所謂的「取反加一」,由誰算呢?
計算機,可不做這些事。
『陸』 原碼為何要轉換為補碼呢
因為加法器。
CPU的加減法是加法器完成的。
當然我們都知道
加上負數就代表減法,CPU也是這么做的。
但問題在於,機器指令,加法ADD,減法SUB。
加法器是只不過是個機器,他的行為很簡單。二進制電路的位邏輯表達很簡單,就是數1bit位,數2bit位,進行異或,然後再和進位標志異或,結果為當前位的值。
如果三個數有2個是1,就會進位。
邏輯很簡單。
拿char來說,
16+16=32,
16+(-16)=0。
二進制
ADD
0001
0000+00010000,答案是0010
0000
就是32。沒問題。
假設僅僅用第一位為符號位,其他位是數字
16+(-16)=
0001
0000
+
1001
0000=
1010
0000
,很可惜這個數是
-32
16+(-16)=-32,悲劇發生。如果用補碼,你就發現奇跡了。。。
『柒』 利用加法器設計一個代碼轉換電路,將bcd代碼的8421碼轉換成餘3碼
根據餘3碼的定義可知,餘3碼是由8421碼加3後形成的代碼。所以,用4位二進制並行加法器實現8421碼到餘3碼的轉換,只需從4位二進制並行加法器的輸入端A4、A3、A2和A1輸入8421碼,而從輸入端B4、B3、B2和B1輸入二進制數0011,進位輸入端C0接上「0」,便可從輸出端F4、F3、F2和F1得到與輸入8421碼對應的餘3碼。
『捌』 原碼的減法為什麼可以轉換成補碼的加法意義又是什麼呢
時鍾,倒撥3小時,可以用正撥9小時來代替。
限定兩位數時,減一,就可用+99代替。
如:24-1=23
24+99=(1)23
只取兩位數,兩個結果,就是相同的。
99,就是-1 的補數。
(在二進制時,就稱為「補碼」。)
就是說:當限定計算的位數後,使用補碼,就可用加法代替減法運算。
意義:僅用一個加法器,就可做加減兩種運算。減少硬體,廠家省錢。
『玖』 試用全加器74LS283及相應門電路設計電路,得到二進制數ABCD(原碼)的補碼A'B'C'D'()
有什麼問題可以繼續問 記得給分
『拾』 正數的補碼等於原碼是如何算出來的
這是規定。
補碼是為負數想出來的辦法,目的是減法可以用加補碼的方法實現,補碼可用反碼加1得來,於是又有了負數的反碼。
計算機里有硬體「加法器」,有了補碼,減法也可以用加法器做了,計算機里運算速度硬體遠快於軟體,這就是反碼,補碼和原碼多樣化的原因。
(10)利用加法器實現源碼轉化補碼擴展閱讀:
原碼求補碼
正數
正整數的補碼是其二進製表示,與原碼相同 。
例:+9的補碼是00001001。(備註:這個+9的補碼是用8位2進制來表示的,補碼表示方式很多,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等。)
負數
求負整數的補碼,將其原碼除符號位外的所有位取反(0變1,1變0,符號位為1不變)後加1。