當前位置:首頁 » 操作系統 » 補碼運演算法則

補碼運演算法則

發布時間: 2022-09-12 14:45:35

A. 補碼運算

補碼相加後的結果:1010
1100
是答案的補碼,要轉化成原碼,才是最終答案.
補碼轉原碼方法同原碼轉補碼,即符號位不變,其餘按位取反後+1
1010
1100
求反:1101
0011
求補:1101
0100
即:-84
這里用到了補碼的運算規則:[X+Y]補=[X]補+[Y]補
求出[X]補+[Y]補後還要求一次補,才能得到答案X+Y
(1)補碼運演算法則擴展閱讀:
補碼運算原理: 在計算機里,如果我們要計算5-3的值,我們既可以用5減去3,也可以用5加上13。
這就像我們的鍾表,它從1點走到12點之後,又回到了1點。我們的計算機也是,從0走到15之後,再往下走就又回到了0,就像我們轉了一個圈一樣。我們從5這個位置往回退3個格,就完成了5-3這個計算。
我們也可以從5這個位置往前走,一直走到15,這時我們走了10個格,然後我們繼續往前走,走到0,然後到1,然後就走到了2。這樣,我們往前走了13個格之後,也到了2這個位置。
所以說,在我們這個計算機中,減3和加13是一樣的。而3+13=16,我們說在模16的系統下,3和13是互補的。
這樣,我們計算5-3就可以換成5+13。3的二進製表示為0011,5的二進製表示為0101。這樣,0101-0011就可以表示為0101+(-0011)。
我們在計算機中都是把負數用其補碼表示,-0011的補碼就是10000-0011(即16-3,也就是13)。10000-0011=1+1111-0011=1+(1111-0011)=1+1100=1101。
我們總說補碼是「按位取反再加一」,看了上面這個式子相信大家就會明白了,其實就是把10000-0011換成了1111-0011再加1的形式。
然後,0101-0011就換成了0101+1101,它們計算出來的結果為10010。由於我們的計算機只有四個bit,所以結果為0010。即,在模16的計算機中,5-3=5+13=2。
參考資料:補碼_網路

B. 補碼運算規則是什麼

對於正數,原碼反碼補碼都是一樣的,對於負數,不看符號位對於剩下求反。

就是把0變成1把1變成0,就是求反了,求反後+1再添上符號位.就得到了補碼,注意這里符號位是不參與取反與+1的10000001

首位(符號位)是1,這個數位負數。

取反:11111110加1

11111111結果為-127

(2)補碼運演算法則擴展閱讀:

正數

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

例:+9的補碼是00001001。(備註:這個+9的補碼是用8位2進制來表示的,補碼表示方式很多,還有16位二進制補碼表示形式,以及32位二進制補碼表示形式,64位進制補碼表示形式等。每一種補碼表示形式都只能表示有限的數字。)

C. 補碼的加法是怎麼算的

計算機內部加法和減法一律按照補碼相加(減)計算的
45的補碼(等於原碼):00101101
-83的補碼(原碼除符號位不變,其餘位取反;+1):10101101
兩者相加,得:11011010
最後還原成原碼:(先-1,再符號位不變,按位取反,得:10100110=>-38)。

D. 二進制補碼怎麼計算的

1、正數的補碼表示:

正數的補碼 = 原碼

負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} or

= {原碼符號位不變} + {數值位從右邊數第一個1及其右邊的0保持不變,左邊安位取反}

以十進制整數+97和-97為例:

+97原碼 = 0110_0001b

+97補碼 = 0110_0001b

-97原碼 = 1110_0001b

-97補碼 = 1001_1111b

2、純小數的原碼:

純小數的原碼如何得到呢?方法有很多,在這里提供一種較為便於筆算的方法。

以0.64為例,通過查閱可知其原碼為0.1010_0011_1101_0111b。

操作方法:

將0.64 * 2^n 得到X,其中n為預保留的小數點後位數(即認為n為小數之後的小數不重要),X為乘法結果的整數部分。

此處將n取16,得

X = 41943d = 1010_0011_1101_0111b

即0.64的二進製表示在左移了16位後為1010_0011_1101_0111b,因此可以認為0.64d =0.1010_0011_1101_0111b 與查詢結果一致。

再實驗n取12,得

X = 2621d = 1010_0011_1101b 即0.64d =0.1010_0011_1101b,在忽略12位小數之後的位數情況下,計算結果相同。

3、純小數的補碼:

純小數的補碼遵循的規則是:在得到小數的源碼後,小數點前1位表示符號,從最低(右)位起,找到第一個「1」照寫,之後「見1寫0,見0寫1」。

以-0.64為例,其原碼為1.1010_0011_1101_0111b

則補碼為:1.0101_1100_0010_1001b

當然在硬體語言如verilog中二進製表示時不可能帶有小數點(事實上不知道哪裡可以帶小數點)。

4、一般帶小數的補碼

一般來說這種情況下先轉為整數運算比較方便

-97.64為例,經查詢其原碼為1110_0001.1010_0011_1101_0111b

筆算過程:

-97.64 * 2^16 = -6398935 =1110_0001_1010_0011_1101_0111b,其中小數點在右數第16位,與查詢結果一致。

則其補碼為1001_1110_0101_1100_0010_1001b,在此採用負數的補碼 = {原碼符號位不變} + {數值位按位取反後+1} 方法

5、補碼得到原碼:

方法:符號位不動,幅度值取反+1or符號位不動,幅度值-1取反

-97.64補碼 =1001_1110(.)0101_1100_0010_1001b

取反 =1110_0001(.)1010_0011_1101_0110b

+1 =1110_0001(.)1010_0011_1101_0111b 與查詢結果一致

6、補碼的拓展:

在運算時必要時要對二進制補碼進行數位拓展,此時應將符號位向前拓展。

-5補碼 = 4'b1011 = 6'b11_1011

ps.原碼的拓展是將符號位提到最前面,然後在拓展位上部0.

-5原碼 = 4『b』1101 = 6'b10_0101,對其求補碼得6'b11_1011,與上文一致。

(4)補碼運演算法則擴展閱讀:

計算機中的符號數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」,而數值位,三種表示方法各不相同。

在計算機系統中,數值一律用補碼來表示和存儲。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬體電路。

E. 什麼是補碼,怎麼計算

無論什麼類型的數字,在計算機中,都是以「二進制代碼」存儲的。

下面按照八位二進制來說明,其它位數,自行腦補。

十進制數 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 的范圍,結果將是錯的。

這種現象稱為「溢出」。

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

---------

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

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

原碼反碼 的用途,僅僅是用於「心算、筆算」。

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

另外,-128,有補碼,但是卻沒有原碼反碼!

用「取反加一」來求-128 的補碼,無異於緣木求魚。

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

但是,考試怎麼辦?

呃 ...,還是別跟老師較勁,他怎麼亂講,你就怎麼答吧。

F. 總結原碼,反碼和補碼的表示方法和運算規則.為什麼在計算機中大多採用補碼

在計算機系統中,正負數值,一律採用補碼來表示和儲存。

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

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

利用補碼,減法就可以用加法運算代替了。

計算機中,只要配置一個加法器,就可以加、減通用了。

原碼和反碼,都沒有這種功能,所以,計算機中不使用它們。

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

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

且看 2 位 10 進制:

25 - 1 = 24

25 + 99 = (一百) 24

只要舍棄進位,+99 就能當做-1 使用。

+99 就稱為-1 的補數。

計算公式: 補數 = 負數 + 10^n,n 是位數。

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

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

8 位 2 進制的范圍:0000 0000~1111 1111(十進制 255)。

求補碼的計算公式:

負數的補碼 = 負數 + 2^8 = 負數 + 256。

正數,不需任何變換,直接就可以進行計算。

所以,正數,並不存在補碼。

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

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

。。。

-128 的補碼是: 128 = 1000 0000。

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

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

7 =0000 0111

-2 的補碼 =1111 1110

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

得:(1)0000 0101= 5

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

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

補碼,就是補碼,與原碼反碼毫無關系。

從「取反加一」來學習補碼,不但不能理解補碼的意義,而且還難以求出-128 的補碼。

為了解釋-128 的補碼,還得編造許多瞎話。

G. 二進制補碼怎麼算

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)。【註: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) 指的就是通常所指的補碼

熱點內容
c語言自考 發布:2025-05-15 07:52:42 瀏覽:499
壓縮的玉 發布:2025-05-15 07:51:22 瀏覽:788
android的控制項 發布:2025-05-15 07:50:36 瀏覽:551
南崗法院伺服器ip地址 發布:2025-05-15 07:46:02 瀏覽:287
實況如何退出賬號安卓 發布:2025-05-15 07:45:56 瀏覽:917
深入編譯器 發布:2025-05-15 07:41:35 瀏覽:878
電信手機號服務密碼怎麼查 發布:2025-05-15 07:40:10 瀏覽:613
python全局變數文件 發布:2025-05-15 07:35:06 瀏覽:954
位元組和存儲位元組 發布:2025-05-15 07:32:10 瀏覽:521
linux應用開發工程師 發布:2025-05-15 07:32:07 瀏覽:261