1. 程式人生 > >計算機基礎之原碼補碼那些事

計算機基礎之原碼補碼那些事

寫這篇文章的目的是把零零碎碎的那些知識點都做個記錄,到時候好回過頭複習。

1.(1)補碼概念:摘自百度https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

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

(2)模的概念

“模”是指一個計量系統的計數範圍。如時鐘等。計算機也可以看成一個計量機器,它也有一個計量範圍,即都存在一個“模”。

例如:在以12模的系統中,加8和減4效果是一樣的,因此凡是減4運算,都可以用加8來代替。對“模”而言,8和4互為補數。實際上以12模的系統中,11和1,10和2,9和3,7和5,6和6都有這個特性。共同的特點是兩者相加等於模。

https://blog.csdn.net/u013814701/article/details/63255237

https://zhidao.baidu.com/question/1239927115133880859.html

2.補碼的計算:(之十進位制轉二級制)

(1)正整數轉成二進位制。要點一定一定要記住哈:除二取餘,然後倒序排列,高位補零。口訣:除二取餘,然後倒序排列,高位補零。

(2)負整數轉換成二進位制: 方法:先是將對應的正整數轉換成二進位制後,對二進位制取反,然後對結果再加一。

(3)小數轉換為二進位制的方法:略

摘自:https://jingyan.baidu.com/article/597a0643614568312b5243c0.html

 

 

tip:1.原碼中0有2種表示方法(正零和負零),補碼中0只有一種表示方法(正零和負零的表示方法一致)

為什麼補碼中0只有一種表示?

百度答案:樓上的說法不正確的~補碼的存在是為了變減法為加法,簡化了計算過程,即硬體的設計難度.首先要知道兩個零是怎麼來的,0包括+0和-0,在原碼和反碼中根據其計算公式,有兩種形式,而對於補碼來說+0,真值為0,000000和-0,其真值為1,0000000補碼:一個數如果為正,則它的原碼、反碼、補碼相同;一個數如果為負,則符號位為1,其餘各位是對原碼取反,然後整個數加1.為了簡單起見,我們用1個位元組來表示一個整數:問題:0的補碼錶示:
+0的補碼:00000000
-0的補碼:第一步:11111111 第二步+1= 1 00000000 第三部:進位1被丟棄 您明白了嗎?

補數相加後不能大於模

摘自:https://www.zybang.com/question/2ded8d9f283e84dd515c8ce36da28b32.html

 2.補碼加法中自然丟棄和溢位的區別

十進位制數相加:(-15) + (-20) = (-35)
用補碼計算,就會有自然丟棄的現象。

(-15) 補= 1111 0001
(-20) 補= 1110 1100
相加:--------
可得: (1)1101 1101

括號中的1,是進位,自然丟棄。

剩下的 1101 1101,就是(-35)補。

===================================

八位的補碼,可以表示十進位制數-128~+127。
運算結果超出這個範圍,就溢位了。

十進位制數計算:(+80) + (+90) = (+170)
用補碼計算,就會有溢位。

(+80) 補= 0101 0000
(+90) 補= 0101 1010
相加:--------
可得: (0) 1010 1010

進位是0。
剩下的 1010 1010,卻是(-86)補。

為什麼不是 (+170)補?
就是因為,超出範圍,溢位了。