博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
在電腦中,為了表示有符號整數(即正數和負數),通常採用二進位補碼表示法。二進位補碼不僅可以表示負數,還能簡化電腦的加法和減法運算。接下來,我們將介紹二進位補碼的概念及其計算方法。
原碼、反碼和補碼
在討論補碼之前,我們先瞭解一下原碼和反碼的概念。
-
原碼:直接將一個有符號整數轉換為二進位數,最高位表示符號(0 代表正數,1 代表負數)。例如:
+5
的原碼為00000101
,-5
的原碼為10000101
。 -
反碼:對於正數,其反碼與原碼相同;對於負數,除符號位外,其餘位取反(0 變為 1,1 變為 0)。例如:
+5
的反碼為00000101
,-5
的反碼為11111010
。 -
補碼:對於正數,其補碼與原碼相同;對於負數,其補碼為反碼加 1。例如:
+5
的補碼為00000101
,-5
的補碼為11111011
。
求補碼的方法
- 求正數的補碼:直接將正數轉換為二進位數,最高位為 0。
- 求負數的補碼:先求其絕對值的二進位數,然後取反並加 1。
示例:
求 +5
和 -5
的補碼:
+5 的補碼:00000101
-5 的補碼:先求 +5 的二進位數:00000101,然後取反:11111010,最後加 1:11111011
補碼的加法運算
使用補碼表示法進行加法運算時,可以將有符號整數的加法統一為無符號整數的加法。計算過程中,如果最高位(符號位)有進位,則忽略該進位。
示例:
計算 +5
和 -3
的和:
+5 的補碼:00000101
-3 的補碼:11111101
相加:
00000101
+ 11111101
----------
100000010 (最高位有進位,忽略)
結果為 00000010
,轉換為十進位數為 2
。所以,+5
和 -3
的和為 2
。
從補碼還原到原碼
為了從補碼還原到原碼,我們可以根據補碼的符號位採取不同的方法:
- 如果補碼的符號位為 0(正數),則補碼即為原碼。
- 如果補碼的符號位為 1(負數),則將補碼減 1,然後取反,即可得到原碼。
示例:
從補碼 11111011
還原到原碼:
補碼:11111011
減 1:11111010
取反:10000101
原碼為 10000101
,表示負數 -5
。
通過學習二進位補碼的概念及其計算方法,我們能夠更好地理解電腦中有符號整數的表示方式和加減法運算。在後續學習 ARM 彙編的過程中,我們會頻繁地使用到補碼表示法,因此熟練掌握補碼的計算方法至關重要。
推薦閱讀:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g