Ⅰ 註:數0的補碼表示是唯一的: +0的補碼=+0的反碼=+0的原碼=00000000 -0的補碼=11111111+1=00000000(mod 2
正數的原碼,反碼,補碼都是一樣的,0的原碼和反碼都有兩個,但是0的補碼是唯一的。
負數的原碼是機器字長的首個數值位為1;反碼是原碼除首位為1外,其他數值取反,(1變成0,0變成1);補碼就是反碼再加1。
假設機器字長8位,則
-0的原碼1000,0000, -0的反碼就是1111,1111,-0的補碼就是反碼加1後變成1,0000,0000,首位溢出後拋棄,變成-0的補碼還是0000,0000。
個人感覺有+0和-0才會出現混亂,數學上的1+(-1)=0,那到計算機里應該是-0還是+0啊,(反正自己沒法理解+0和-0),最後只能用補碼來進行負數的計算,結果才會正確。
Ⅱ 整數0的補碼為什麼只有一種形式000……0
0的原碼是不惟一的:[+0]原=00000000,[-0]原=10000000
0的反碼也是不惟一的:[+0]反=00000000,[-0]反=11111111
與原碼和反碼不同,0的補碼是惟一的,這可由補碼的定義得到。對於n=8,有
[+0]補 = [+0]反 = [+0]原 = 00000000
[-0]補 = [-0]反 + 1 = 11111111 + 1 = 00000000(mod 2的8次方)
即對8位字長來講,最高位的進位(2的8次方)按模256運算被舍掉,所以[+0]補=[-0]補
Ⅲ 補碼到底是怎麼一回事
在計算機系統中,數值,一律用補碼來表示和存儲。
補碼,實際上,就是一個「代替負數」的【正數】。
使用了補碼(正數)之後,在計算機中,就沒有負數了。
隨之而來的就是:減法運算,也都不存在了。
所以,藉助於補碼,計算機只需要配置一個加法器,就能走遍天下。
使用補碼的目的,也就是:簡化計算機的硬體。
---------------------
補碼(一個正數),怎麼就能代替負數呢?
你看時針:倒撥 3 小時,可以用正撥 9 小時代替吧?
你看三角函數:-π/2、+3π/2,兩者的函數值也是相同的吧?
10 進制數,如果限定只用 2 位 ,那麼就會有:
25 - 1 = 24
25 + 99 = (一百) 24
如果忽略進位一百(10^2),+99 就可以代替-1。
上面所說的這些正數,就是「負數的補數」。
求補數的公式,你自己可以推出,即:
補數(即正數)= 負數 + 周期。
正數,必須直接參加運算,不可再做任何變換。
就是說:
正數,本身就已經是正數了,它並不存在什麼補數。
---------------------
計算機用二進制,補數,那就稱為「補碼」了。
8 位 2 進制的周期,是:2^8 = 256。
-1 的補碼,就是:-1 + 256 = 255 = 1111 1111(二進制)。
-2 的補碼是:-2 + 256 = 254 = 1111 1110。
。。。
-128 的補碼,就是:128 = 1000 0000。
---------------------
至此,你就可以推出「補碼的定義式」:
當 X >= 0, [ X ]補 = X; 零和正數不用變換。
當 X < 0, [ X ]補 = X + 2^n。n 是補碼的位數。
這是通用的公式。
---------------------
計算 5 - 7 =-2,用八位補碼計算如下:
5=0000 0101
[-7]補碼 =1111 1001
--相加-----------
得:(1)1111 1110= [-2]補碼
舍棄了進位,結果,就是正確的。
Ⅳ 計算機中的所有數字都是用補碼來表示嗎
不是,只有有符號數才用補碼表示。比如8位有符號數表示範圍是-128~127,而無符號數就可以表示0~255。計算機採用補碼是為了有符號數中0的表示的唯一性,並且可以把減法轉換成加法來運算。除了數字,計算機中還有很多其他的數據,比如說字元等,這些都不用補碼表示。
Ⅳ 計算機為什麼用補碼存儲數據
使用補碼的好處:
1.
可加法代替減法運算,[a-b]補
=
[a]補+[-b]補
簡體了計算機運算硬體電路,提高運算效率:
2.
統一了正0和負0
原碼及反碼的正0、負0有不同的表示,補碼的0是唯一的,
例如字長8位,補碼的0表示為唯一的00000000
Ⅵ 為什麼在機器數補碼中,零的表示是唯一的。
對於(+0)和(-0),在人們的計算概念中零是沒有正負之分的.(印度人首先將零作為標記並放入運算之中,包含有零號的印度數學和十進制計數對人類文明的貢獻極大).
於是就引入了補碼概念. 負數的補碼就是對反碼加一,而正數不變,正數的原碼反碼補碼是一樣的.在用位元組表示時補碼中用(-128)代替了(-0),所以用位元組表示的補碼的范圍為:
(-128~0~127)共256個.
注意:(-128)沒有相對應的原碼和反碼。
Ⅶ 請問計算機的補碼總為什麼0有唯一的補碼,即[+0]=[-0]=00000000[-0]不應該不是這樣嗎
貌似是因為計算機中沒有+0和-0的區別。拿8位機舉例:如果有正零和負零的區別的話計算機一位的長度只能表示-127~+127共255個數,但是如果把1000,0000即我們認為的-0判斷成+128就能多表示一個數。為了功能更強大,所以設計人員讓計算機內部就不區別+0,-0所以也就不存在-0這個東東,所以0的補碼是唯一的也就是+0的補碼.
Ⅷ 計算機為什麼用補碼存儲數據
補碼的功能,類似於:
時針倒撥 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
舍棄進位,結果就完全正確。
藉助於補碼,負數就沒有了,從而就把「減法轉換為加法運算」。
-----------------------
補碼的來源,與原碼反碼毫無關系。
「原碼反碼取反加一、符號位也能參加運算」...
這些,都沒有什麼理論依據。
從「取反加一」來學習補碼,就弄不清楚「為什麼用補碼」。
Ⅸ 為什麼「對於真值0,源碼有兩種不同的表現形式,而補碼卻只有唯一的一種表現形式.」
0可以是+0,也可以是-0
0的原碼為:10000(-0),00000(+0)
+0的補碼和原碼相同,為00000
-0的補碼是在-0的原碼(10000)的基礎上,符號位不變,其它位按位取反再在低位加1(11111+1=00000),進而得到-0的補碼00000
所以補碼表示0隻有一種情況00000.而原碼則表示了兩次,分別為10000和00000.
希望可以幫到你,謝謝!