計算機基礎之原碼補碼那些事
寫這篇文章的目的是把零零碎碎的那些知識點都做個記錄,到時候好回過頭複習。
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)補?
就是因為,超出範圍,溢位了。