機(jī)器數(shù)和真值
機(jī)器數(shù)
一個數(shù)在計算中的二進(jìn)制表示形式,叫做這個數(shù)的機(jī)器數(shù),機(jī)器數(shù)是帶符號的,正數(shù)為0,負(fù)數(shù)為1。
如 :
- 十進(jìn)制數(shù)+3,機(jī)器數(shù)就是00000000000000000000000000000011
- 十進(jìn)制數(shù)-3,那機(jī)器數(shù)不就是10000000000000000000000000000011 ,想當(dāng)然~ 實(shí)際是11111111111111111111111111111101,這個數(shù)是-3的補(bǔ)碼形式,因?yàn)?strong>負(fù)數(shù)在機(jī)器中是以補(bǔ)碼的形式存在的。
真值
真正數(shù)學(xué)意義上的數(shù)值。因?yàn)榈谝晃皇欠栁唬詸C(jī)器數(shù)形式值就不等于真正的數(shù)值。 如:
00000000000000000000000000000011->+3
11111111111111111111111111111101->-3
當(dāng)然前面的舉例是針對有符號數(shù)來說的,對于無符號數(shù),機(jī)器數(shù)和真值是一致的。
無符號數(shù)和有符號數(shù)機(jī)器數(shù)和真值換算方式
無符號數(shù)換算:
用一個函數(shù) B2Uw (Binary to Unsigned)的縮寫,長度為w來表示:
如4位二進(jìn)制數(shù):
有符號數(shù)換算方式
前面我們說過有符號數(shù)在計算機(jī)中的機(jī)器數(shù)是以補(bǔ)碼的形式存在的,其換算公式 B2Tw (Binary to Two`s complement):
如下面4位二進(jìn)制數(shù):
當(dāng)然還有一種大眾所知的方式:就是使用原碼,反碼,補(bǔ)碼變換規(guī)律
原碼,反碼,補(bǔ)碼
計算機(jī)機(jī)器數(shù)運(yùn)行效率問題
首先要清楚我們計算機(jī)中統(tǒng)一使用的是加法計算,對你沒聽錯。。計算機(jī)居然不會減法,哈哈。
在補(bǔ)碼概念提出之前,我們來舉幾個例子:
可以看到在有負(fù)數(shù)參與的加法計算得到的結(jié)果是有誤的。
如果需要得到正確的結(jié)果,計算器不得不是有其他方式去得到,這樣必然就會影響運(yùn)行效率。
為了解決負(fù)數(shù)在計算機(jī)中運(yùn)行效率問題,科學(xué)家們提出了補(bǔ)碼的概念。
補(bǔ)碼:
使用補(bǔ)碼獲取真值
那如何使用補(bǔ)碼規(guī)則獲取一個負(fù)數(shù)的真值呢?
假設(shè)我們從計算中獲取了一個二進(jìn)制為10000001的8位機(jī)器數(shù),如何獲取其真值。
- step1 .首先10000001是指一個補(bǔ)碼形式機(jī)器數(shù),實(shí)際上在計算機(jī)系統(tǒng)中,所有的整數(shù)都是以補(bǔ)碼的形式存在,包括正數(shù)和負(fù)數(shù),正數(shù)的補(bǔ)碼就是原碼自己所以統(tǒng)一使用補(bǔ)碼來存儲。
- step2 .按照補(bǔ)碼到反碼規(guī)則,在補(bǔ)碼10000001基礎(chǔ)上-1,將得到反碼:10000000
- step3 .按照反碼到原碼規(guī)則,將符合位不變,反碼取反即可得原碼:11111111
- step4 .按照原碼的真值概念:原碼的符合位為符號位,不參與計算,其他位為真值的絕對值即可:- 127
補(bǔ)碼的計算邏輯
我們回到前面分析運(yùn)行效率時舉的正正,負(fù)負(fù),正負(fù)相加例子:
這里我們使用補(bǔ)碼再來計算下:
可以看出,將符號以補(bǔ)碼的形式存儲在計算機(jī)中之后就可以使用加法來代替減法的操作,大大提高了計算機(jī)的運(yùn)行效率。
補(bǔ)碼的設(shè)計來源
通過文章前半部分介紹,相信你已經(jīng)對補(bǔ)碼有了一個比較全面的概念了,但是補(bǔ)碼是怎么設(shè)計出來的呢?
數(shù)學(xué)里面有一個“補(bǔ)數(shù)”概念。
補(bǔ)數(shù)
生活中有很多例子,只要是 帶周期性的事務(wù)性質(zhì)的都可以用補(bǔ)數(shù)來形容 。比如:時鐘或者轉(zhuǎn)盤等。
假設(shè)當(dāng)前時間是2點(diǎn),你要讓時鐘顯示到12點(diǎn),那么有兩個方式。
- 方式1 .將指針順時針撥動10個點(diǎn),做的是 加法 :+10。
- 方式2 .將指針逆時針撥動2個點(diǎn),做的是 減法 :-2。
對于時鐘來說,不管你是方式1的加法運(yùn)行還是方式2的減法運(yùn)算,指針都指向了12點(diǎn),實(shí)現(xiàn)的效果是一致的, 那我們就說+10和-2是兩個補(bǔ)數(shù),它們的絕對值之和12就是補(bǔ)數(shù)的模 。
這種規(guī)律也被應(yīng)用到計算機(jī)二進(jìn)制中 。下面我們使用一個例子來看:
假設(shè)要計算:(5)+(-1) = 5+(+?)
- 5在計算機(jī)中的原碼: 0 0 0 0 0 1 0 1
- -1在計算機(jī)中的原碼:1 0 0 0 0 0 0 1
要將這個減法操作變?yōu)榧臃ú僮鳎滓蝿?wù)就是找到模,然后得到-1的正補(bǔ)數(shù)相加即可 。
來看我們的時鐘,每撥動12格為一個周期,就是說復(fù)原了,一樣的, 8bit位范圍是-128~127 ,(注意這里我們?yōu)榱司喎治鍪褂玫氖?位來測試計算,實(shí)際計算機(jī)中場景一般都是32位格式4個字節(jié)或者64位計算)所以 其一個周期就是256,也就是其模就是256 (1 0000 0000),不管你是加上256還是減少256,在二進(jìn)制中,值都是不變的,因?yàn)樽詈笠晃皇且绯鑫唬粫ビ嬎恪?/p>
通過以上分析我們找到了-1(1 0 0 0 0 0 0 1)的模為256(1 0000 0000),-1的補(bǔ)數(shù)為(+255):0 1111 1111
這樣就將5-1這個減法運(yùn)算變更為了5+255這個加法操作
下面我們來看5+255:
5:0000 0101
255:0 1111 1111
二進(jìn)制相加后:1 0000 0100 ->最高位溢出丟棄所以結(jié)果為4.
看到是不是和5-1結(jié)果一樣呢?。
其實(shí)計算機(jī)中的補(bǔ)碼也是這個模式: 找到一個與負(fù)數(shù)等價的正補(bǔ)數(shù),使用該正補(bǔ)數(shù)代替負(fù)數(shù),從而將減法運(yùn)算替換為兩個正數(shù)加法運(yùn)算 ,補(bǔ)碼的出現(xiàn)與運(yùn)算器的電路設(shè)計有關(guān),從設(shè)計者的角度看,希望盡可能簡化電路設(shè)計和計算復(fù)雜度。而使用正補(bǔ)數(shù)代替負(fù)數(shù)就可以消除減法器,實(shí)現(xiàn)簡化電路的目的。
我們下期見。
參考:為什么計算機(jī)中的負(fù)數(shù)要用補(bǔ)碼表示?
-
二進(jìn)制
+關(guān)注
關(guān)注
2文章
795瀏覽量
41669 -
計算機(jī)
+關(guān)注
關(guān)注
19文章
7508瀏覽量
88069 -
十進(jìn)制
+關(guān)注
關(guān)注
0文章
67瀏覽量
13224 -
補(bǔ)碼
+關(guān)注
關(guān)注
0文章
14瀏覽量
7558
發(fā)布評論請先 登錄
相關(guān)推薦
評論