計算機為什麼要用補碼
轉自:https://blog.csdn.net/bendanban/article/details/8681456
計算機使用補碼錶示負整數!正整數就用原始碼來表示。那什麼是補碼呢?其實原始碼的補碼就是原始碼的相反數,他們相加得0 。
計算負整數的補碼:
規則就是原始碼各位取反,然後加1得到。
例如:如果我們用8位來表示有符號整數的話,那麼十進位制1用二進位制表示為:
00000001
這個數取反加1的結果是:
11111111
所以,-1的補碼就是11111111。
大家可能會有疑問,到底什麼是補碼,為什麼-1的補碼不是-1的原始碼取反加1呢?
這是因為:-1的補碼是1的補碼錶示法。所以計算機裡用1的相反數(就是-1的補碼)來表示-1 。
計算二進位制有符號數的十進位制數
既然有符號數在計算機裡有補碼錶示負整數,那我們如何根據給定的二進位制數來計算十進位制數呢?
看例子:
假設給了一個數:
10000100
看符號位為1,為負數,所以這個數是用補碼錶示的!先計算原始碼。
各位取反加1的結果是:
01111100(二進位制) = 124(十進位制)
所以原先給出的二進位制數的十進位制數是 -124 。
計算負整數的二進位制補碼錶示
繼續剛才那個例子,如果我們拿到的是十進位制-124,那麼他的二進位制補碼是多少呢?
其實他的補碼就是124的二進位制數求補的結果。
124的二進位制數為:01111100
取反 :10000011
加1 :10000100
所以-124的二進位制補碼錶示就是10000100
為什麼使用補碼錶示負整數
原因很簡單,如果使用補碼錶示負整數,那麼ALU在做整數之間的操作時,就不用區分符號了,所有位都會參與運算,其上上面的例子中,符號位都參與了運算。
例如執行2-1這個操作,我們可以用2+(-1)來計算。
2的二進位制數是:00000010
1的二進位制數是:00000001 --> -1的二進位制補碼是:11111111
所以2+(-1):
00000010
+ 11111111
----------------
00000001
結果是1。
我們再看個結果為負數的。
求1-2的結果,用1+(-2)來計算。
2的二進位制數是:00000010,所以-2的二進位制數為:11111101+1=11111110
1+(-2)的計算過程是:
00000001
+ 11111110
---------------
11111111
這個結果的十進位制數是多少呢?
首先它是個負數,說明結果使用補碼錶示的,將各位取反加1後的結果是00000001=1(十進位制),然後加上他的符號,就是-1了,
所以1+(-2)的結果是-1 。
用補碼計算確實簡化了ALU的設計難度!!所以計算機用補碼來表示負整數!!!!
應該看明白了。。
---------------------
作者:bendanban
來源:CSDN
原文:https://blog.csdn.net/bendanban/article/details/8681456
版權宣告:本文為博主原創文章,轉載請附上博文連結!
相關文章
- 為什麼計算機採用補碼進行運算?計算機
- 計算機中為什麼要用二進位制計算機
- 計算機補碼儲存計算機
- 企業為什麼要用雲端計算?企業購買雲端計算時需要注意什麼?
- 為什麼要用dockerDocker
- 為什麼要用docker?Docker
- 為什麼要用RedisRedis
- 開發者解讀:為什麼螞蟻要用融合計算這種新計算模式?模式
- 為什麼要用混合加密?加密
- 為什麼要用SOCKS代理?
- [計組] 計算機編碼方式:原碼、反碼、補碼計算機
- 計算機原碼, 反碼,補碼的介紹計算機
- 我們為什麼要用RedisRedis
- 為什麼要用單例模式?單例模式
- 為什麼要用資料中臺
- 為什麼要用where 1=1
- 為什麼要用Node.jsNode.js
- 為什麼要用工廠模式模式
- 為什麼要用Redis叢集?Redis
- 程式設計師為什麼一定要用Linux?程式設計師Linux
- 程式設計師為什麼一定要用 Linux ?程式設計師Linux
- 什麼是計算機編碼的定義?計算機
- Java中Short型別轉換為Int型別是如何計算的?原碼、反碼、補碼是什麼?Java型別
- 為什麼我要用GoEasy替代WebSocketGoWeb
- Dubbo為什麼要用Go重寫?Go
- Android開發為什麼要用MVP?AndroidMVP
- python為什麼要用執行緒Python執行緒
- 為什麼要用Redis?Redis為什麼這麼快?(來自知乎)Redis
- 為什麼計算機對浮點型數字計算存在誤差計算機
- 深入理解計算機中的原碼、補碼、反碼計算機
- 學懂模運算 負數的補碼為什麼要按位取反再加一
- 漫談計算機組成原理(八)原碼、補碼、反碼計算機
- 計算機二進位制中的原碼,反碼,補碼計算機
- Jmeter 本身能錄製指令碼,為什麼還要用 Fiddler 生成指令碼?JMeter指令碼
- 我們為什麼要用英文寫文件?
- springboot為什麼要用延遲匯入?Spring Boot
- PG資料庫為什麼要用autovacuum資料庫
- 解析:為什麼人工智慧要用Python?人工智慧Python