负数在计算机中的二进制表示方法
因為需要,補充一點『計算機原理』有關的知識。
首先需了解一下下面幾個概念:
- 原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。
- 反碼:對于負數而言,將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
- 補碼:對于負數而言,反碼加1稱為補碼。
反碼和補碼都是對于負數而言的,正數的反碼、補碼和原碼是一樣的。下面舉一個例子:比如8位機中-3用二進制表示為00000011。那么,他的原碼、反碼、補碼分別為:
原碼:00000011
反碼:11111100
補碼:11111101
我們回到最開始的問題:負數在計算機中是如何表示的?有一個想法很容易就會被人想到:我用一個二進制位(比如二進制的最高位)專門表示符號(1表示負數,0表示整數),比如在8位機中-8的二進制表示為1 0001000,+8的二進制表示為0 0001000。但是隨手找一本『計算機原理』相關的書籍,它都會告訴你,計算機內部采用2的補碼(Two’s Complement)來表示負數。
那么為什么用2的補碼方式來表示負數呢?首先需要明確一點:計算機內部無論采用什么方式表示負數,其實都是無所謂的,只要能保持一一對應的關系即可。那么,既然任意選擇,那么理應選擇一種最為方便的方式。2的補碼就是最為方便的方式,其便利之處在于:所有的加法運算都可以使用同一種電路完成。我們不妨將『最高位記為符號位』方式稱作方式A,將『2的補碼』方式稱為方式B。下面用8位機中16+8和16+(-8)為例說明:
方式 A:16+8二進制加法:
00010000 +00001000 =00011000 // 24方式 A:16+(-8)二進制加法:
00010000 +10001000 =10011000 // -24如果『計算負數加法』采用的方法和『計算正數加法』的方法一樣的話,那么就會出錯。顯然需要兩種計算策略,從電路上說,就是必須要為加法運算做兩種電路。
方式 B:16+8二進制加法:
00010000 +00001000 =00011000 // 24方式 B:16+(-8)二進制加法:
00010000 + 11111000 =100001000 // 8(第 9 位溢出舍棄)顯然用『2的補碼』方式表示負數做一套電路就行了。
總結
以上是生活随笔為你收集整理的负数在计算机中的二进制表示方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vim查找替换操作 --- 查找和替换
- 下一篇: 硬件(转)如何在模拟电路PCB板上做好信