補碼存儲
『壹』 計算機為什麼採用補碼的形式存儲數據
主要為了便於運算,不管是正負數的補碼,都可以不加任何判斷,直接用同個加法器運算。
『貳』 計算機中的負數為什麼用補碼存儲
計算機中的負數是為了方便運算,所以計算機才會採用補碼存儲數據。補碼是計算機方便加法運算的編碼。例如100(10進制)100/16=6餘46/16=0餘6。所以100的16進制數是64H以8位二進制來說64H=01100100B正數的補碼和原碼相同。
所以100的補碼還是01100100。
另假設還有個數是-109109的16進制,是01101101-109的原碼,就是11101101(首位是符號位)-109的反碼,就是10010010(除了符號位其他各位分別取反)。109的補碼就是10010011(反碼加1)。現在運算100-109=100+(-109)。01100100+10010011=11110111這個結果就是-9的補碼。如果換成其他編碼運算就不會這么簡單了。
例如原碼相加的話存在符號位進位的問題等等。對於計算機而言。數值的計算補碼是最方便的。
『叄』 既然計算機內部數據是以補碼存儲的,為什麼還要有原碼呢原碼和反碼存在的意義是什麼 初學者請教大家
正負數據,只是使用補碼來存放。
計算機中,並沒有原碼和反碼。
正負數,和補碼之間,有個關系式,可以直接互相轉換,並不需要繞道原碼反碼。
原碼和反碼,可以說,一無是處。
『肆』 計算機為什麼使用補碼來存儲數據
補碼的功能,類似於:
時針倒撥 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
舍棄進位,結果就完全正確。
藉助於補碼,負數就沒有了,從而就把「減法轉換為加法運算」。
-----------------------
補碼的來源,與原碼反碼毫無關系。
「取反加一、符號位也能參加運算」,這些,都沒有什麼理論依據。
通過原碼反碼,已經證明「符號位能參加運算」是錯誤的。
補碼能正確運算,並不是什麼「符號位也參加運算」。
因為,補碼,它就是一個正數,什麼符號位也沒有。
補碼的全部位,都是代表數據的,當然就都可以參加運算。
『伍』 為什麼數據在內存里是以補碼的形式存儲
數據在內存里是以補碼的形式存儲的原因有三點:
1、保證了0的唯一性,保證了數的表示的准確性。
2、讓加減可以統一處理,優化了數的運算過程。
3、解決了自身邏輯意義的完整性。
數據在內存里以補碼的形式存儲是為了簡化計算機的結構設計,同時也提高了運算速度。在計算機系統中,數值一律用補碼來表示和存儲。
(5)補碼存儲擴展閱讀:
補碼的主要特性:
補碼為一個負整數(或原碼)與其補數(或補碼)相加,和為模。在補碼的運算中,對一個整數的補碼再求補碼,等於該整數自身。補碼的正零與負零表示方法相同。計算機底層不區分無符號數和補碼數,可認為其運算全部當作無符號數處理。
補碼使得符號位能與有效值部分一起參加運算,從而簡化運算規則。使減法運算轉換為加法運算,進一步簡化計算機中運算器的線路設計。所有這些轉換都是在計算機的最底層進行的,而在我們使用的匯編、C等其他高級語言中使用的都是原碼。
參考資料來源:網路-補碼
『陸』 為什麼負數要以補碼形式存儲
補碼的功能類似於:時針倒撥 3 小時,與正撥 9 小時,效果相同。
那麼,計算機中的負數,也可以改為正數(即補碼)。
同時,減法運算,也就可以用加法運算代替了。
於是,藉助於補碼,就統一了加減法,就能夠簡化計算機的硬體。
十進制比較容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略進位,+99 就能代替-1。
+99 就稱為-1 的補數。
在這里用了 2 位 10 進制。
求補數的演算法:補數 = 負數 + 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,存放的,就是二進制 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 的補碼,無異於緣木求魚。
所以,大家,完全不必在原碼反碼 上浪費時間精力。
但是,考試怎麼辦?
呃 ...,還是別跟老師較勁,他怎麼講,你就怎麼答吧。
『玖』 關於匯編里數據(補碼)的存儲問題!
用匯編語言編程,-10,或
246,都是編譯成
F6H,再存儲到計算機。
計算機,不管它是
-10,還是
246,它就是《存著》而已。
這個數字,就等著你來編寫指令來處理。
你使用了無符號的數據處理方法,計算機就拿它當做
246。
你使用了有符號的數據處理方法,計算機就拿它當做
-10。
『拾』 計算機為什麼用補碼存儲數據
補碼的功能,類似於:
時針倒撥 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
舍棄進位,結果就完全正確。
藉助於補碼,負數就沒有了,從而就把「減法轉換為加法運算」。
-----------------------
補碼的來源,與原碼反碼毫無關系。
「原碼反碼取反加一、符號位也能參加運算」...
這些,都沒有什麼理論依據。
從「取反加一」來學習補碼,就弄不清楚「為什麼用補碼」。