Knowledge Point 20180305 数据在计算机中的表示
計(jì)算機(jī)發(fā)明的初衷就是用于幫助我們加工和處理數(shù)據(jù),雖然時(shí)至今天計(jì)算機(jī)看起來(lái)無(wú)所不能,但它根本上還是在做數(shù)據(jù)的加工和處理,數(shù)據(jù)的機(jī)器層次表示將直接影響到計(jì)算機(jī)的結(jié)構(gòu)和性能。
在計(jì)算機(jī)中,采用數(shù)字化方式來(lái)表示數(shù)據(jù),數(shù)據(jù)有無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)之分,其中帶符號(hào)數(shù)根據(jù)其編碼的不同又有原碼、補(bǔ)碼和反碼3中表示形式。下面我們來(lái)認(rèn)識(shí)一下;
無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)
所謂無(wú)符號(hào)數(shù),就是整個(gè)機(jī)器字長(zhǎng)的全部二進(jìn)制位均表示數(shù)值位(沒(méi)有符號(hào)位),相當(dāng)于數(shù)的絕對(duì)值,大致相當(dāng)于數(shù)學(xué)中的自然數(shù)。如01000001表示無(wú)符號(hào)數(shù)65,11000001表示無(wú)符號(hào)數(shù)193。機(jī)器字長(zhǎng)為n+1位的無(wú)符號(hào)數(shù)的表示范圍是0 ~(2^(n+1) - 1),此時(shí)二進(jìn)制的最高位也是數(shù)值位,其權(quán)值等于2^n。如字長(zhǎng)為8,那么數(shù)的表示范圍就是0~255。一般計(jì)算機(jī)中都會(huì)有一些無(wú)符號(hào)數(shù)的運(yùn)算和處理指令,如條件轉(zhuǎn)移指令等。
然而,如同我們現(xiàn)實(shí)世界所見(jiàn)的大部分?jǐn)?shù)據(jù)一樣,它還是需要區(qū)分正負(fù)(“+”“-”)的。在日常生活中我們使用正負(fù)和絕對(duì)值來(lái)表示數(shù)值的大小,用這種形式表示的數(shù)值在計(jì)算機(jī)技術(shù)中稱為“真值”。
對(duì)于數(shù)的符號(hào)“+”和“-”,計(jì)算機(jī)是無(wú)法識(shí)別的(實(shí)際上除了0和1,計(jì)算機(jī)什么也識(shí)別不了),因此需要把符號(hào)數(shù)碼化。通常約定二進(jìn)制數(shù)的最高位為符號(hào)位,“0”表示正號(hào),“1”表示負(fù)號(hào)。這種在計(jì)算機(jī)中使用的表示數(shù)的形式稱為機(jī)器數(shù),常見(jiàn)的機(jī)器數(shù)有原碼、反碼和補(bǔ)碼等不同的表現(xiàn)形式。
區(qū)別于無(wú)符號(hào)數(shù),帶符號(hào)數(shù)的最高位被用來(lái)表示符號(hào),如上面的01000001表示帶符號(hào)數(shù)為正65,11000001表示帶符號(hào)數(shù)為-65。為了能正確的區(qū)別出真值和各種機(jī)器數(shù),我們用X表示真值,[X]原表示原碼,[X]補(bǔ)表示補(bǔ)碼,[X]反表示反碼。原碼、補(bǔ)碼和反碼是計(jì)算機(jī)中的幾種表現(xiàn)形式,目的在于能夠使計(jì)算機(jī)對(duì)數(shù)據(jù)的一系列運(yùn)算得出正確結(jié)果。
原碼表示法
原碼表示法是一種最簡(jiǎn)單的機(jī)器數(shù)據(jù)表示法,其最高位是符號(hào)位,數(shù)值部分則與真值相同。
若真值是純小數(shù),那么原碼的定義為:
[X]原 = X ??0<=X<1
[X]原 = 1-X = 1+|X| ??-1<X<=0
若真值為純整數(shù),它的原碼定義為:
[X]原 = X ??0<=X<2^n
[X]原 = 2^n-X = 2^n + |X| ??-2^n<X<=0
因?yàn)樵a具有符號(hào)位,所以原碼中的0是有兩種表示形式的
[+0]原 = 00000
[-0]原 = 10000
原碼表示法的優(yōu)點(diǎn)是直觀易懂,機(jī)器數(shù)和真值間的相互轉(zhuǎn)換很容易,用原碼實(shí)現(xiàn)乘除運(yùn)算阿德規(guī)則很簡(jiǎn)單;缺點(diǎn)則是實(shí)現(xiàn)加減運(yùn)算的規(guī)則較為復(fù)雜.
補(bǔ)碼表示法
在介紹補(bǔ)碼之前,先認(rèn)識(shí)一下模和同余。
模和同余
我們這里所說(shuō)的模和通常所見(jiàn)的模數(shù)是不同的概念,這里所說(shuō)的模(Module)是指一個(gè)計(jì)量器的容量,可用M表示。例如:一個(gè)4位的二進(jìn)制計(jì)數(shù)器,當(dāng)計(jì)數(shù)器從0開(kāi)始計(jì)數(shù)到15之后,再加1,計(jì)數(shù)器的值就又會(huì)變成0。這個(gè)計(jì)數(shù)器的容量M = 2^4 = 16,即模為16。由此可見(jiàn),純小數(shù)的模為2(二進(jìn)制計(jì)數(shù)中對(duì)于純小數(shù),它們的模永遠(yuǎn)都是2,因?yàn)橐坏┬?shù)位全為1后就會(huì)進(jìn)位位整數(shù)位,所以小數(shù)位的周期都是2,即模數(shù)(容量)為2。),一個(gè)字長(zhǎng)為n+1位的純整數(shù)的模為2^(n+1)。
同余概念是指兩個(gè)整數(shù)A和B除以同一個(gè)正整數(shù)M,所得余數(shù)相同,則稱A和B對(duì)M同余,即A和B在以M為模時(shí)是相等的,可寫作
A = B(mod M)
生活中最常見(jiàn)的同余莫過(guò)于時(shí)鐘了,對(duì)于時(shí)鐘而言,其模M = 12,故4點(diǎn)和16點(diǎn)、5點(diǎn)和17點(diǎn)、……均是同余的,它們可以寫作
4 = 16(mod 12) 5 = 17(mod 12)
利用模和同余概念的補(bǔ)碼表示法在進(jìn)行算術(shù)運(yùn)算時(shí)可以使減法運(yùn)算轉(zhuǎn)化成加法運(yùn)算,從而簡(jiǎn)化機(jī)器的運(yùn)算器電路。
還以時(shí)鐘為例,假如時(shí)鐘停留在8點(diǎn),而現(xiàn)在正確的時(shí)間是6點(diǎn),這時(shí)撥準(zhǔn)時(shí)種的方法有兩種:
- l?將分針倒著撥兩圈(即倒撥兩小時(shí))8-2=6(這是通過(guò)減法實(shí)現(xiàn)的)。
- l?將分針正著旋轉(zhuǎn)10周(即正撥10小時(shí))8+10=6(mod 12)(這是通過(guò)加法實(shí)現(xiàn)的)
此時(shí) ?8 - 2 = 8 + 10(mod 12)
設(shè):A = -2 , B = 10
則:10/12 = (12-2)/12 = 1 + (-2/12)
上面-2和10也是同余。同余的兩個(gè)數(shù)具有互補(bǔ)的關(guān)系,-2和10對(duì)模12互補(bǔ),也就是說(shuō)-2的補(bǔ)數(shù)是10(以12位模)。
由此可見(jiàn),只要確定了“?!?#xff0c;就可找到一個(gè)與負(fù)數(shù)等價(jià)的正數(shù)(該正數(shù)即為負(fù)數(shù)的補(bǔ)數(shù))來(lái)代替此負(fù)數(shù),而這個(gè)正數(shù)可以用模加上負(fù)數(shù)本身求得,這樣就可把減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算實(shí)現(xiàn)了。而將補(bǔ)數(shù)概念運(yùn)用到計(jì)算機(jī)中就出現(xiàn)了補(bǔ)碼這種機(jī)器數(shù)。
[X]補(bǔ) = X (mod M) ??0 <= X < M/2
[X]補(bǔ) = (M + X)(mod M) ????(-M/2) <= X < 0
補(bǔ)碼表示
補(bǔ)碼的符號(hào)位表示方法和原碼相同,其數(shù)值部分的表示與數(shù)的正負(fù)有關(guān):對(duì)于正數(shù)其數(shù)值部分與真值形式相同;對(duì)于負(fù)數(shù),將真值的數(shù)值部分按位取反,且在最低位上加1。
若真值為純小數(shù),它的補(bǔ)碼表示為:
[X]補(bǔ) = X (mod 2) ??0 <= X < 1
[X]補(bǔ) = (2 + X)(mod 2) = (2-|X|)(mod 2) ????-1 <= X < 0
若真值是純整數(shù),它的補(bǔ)碼為:
[X]補(bǔ) = X ??0<=X<2^n
[X]補(bǔ) = X + 2^(n+1) = 2^(n+1) - |X| ??-2^n<X<=0
在補(bǔ)碼表示中,0的表示形式是唯一的:
[+0]補(bǔ) = [-0]補(bǔ) = 00000
反碼表示法
反碼表示法與補(bǔ)碼表示法有許多類似之處,對(duì)于正數(shù),數(shù)值部分與真值形式相同;對(duì)于負(fù)數(shù),將真值的數(shù)值部分按位取反。它與補(bǔ)碼的區(qū)別是末位少加一個(gè)1,因而很容易從補(bǔ)碼的定義推出反碼的定義。
三種機(jī)器數(shù)的比較與轉(zhuǎn)換
通過(guò)上面的學(xué)習(xí),我們知道數(shù)值在計(jì)算機(jī)中的三種表現(xiàn)形式,下面我們針對(duì)這三種數(shù)據(jù)進(jìn)行比較學(xué)習(xí);
比較
原碼、反碼、補(bǔ)碼這三種機(jī)器數(shù)既有共同點(diǎn),又有各自不同的性質(zhì),主要區(qū)別有一下幾點(diǎn):
- l?對(duì)于正數(shù)它們都等于真值本身,對(duì)于負(fù)數(shù)有各自的表現(xiàn)形式。
- l?最高位都用來(lái)表示符號(hào)位,補(bǔ)碼和反碼的符號(hào)位可作為數(shù)值位的一部分看待,和數(shù)值一起參與運(yùn)算;但原碼的符號(hào)位不允許和數(shù)值位同等看待,必須分開(kāi)處理。
- l?對(duì)于真值0,原碼和反碼各有兩種不同的表現(xiàn)形式,而補(bǔ)碼只有唯一的表現(xiàn)形式。
- l?原碼、反碼表示的正負(fù)數(shù)范圍相對(duì)零來(lái)說(shuō)是對(duì)稱的;但補(bǔ)碼負(fù)數(shù)表示范圍較正數(shù)表示范圍寬,能多表示一個(gè)最負(fù)的數(shù)(絕對(duì)值最大的負(fù)數(shù)),其值等于-2^n(純整數(shù))或-1(純小數(shù))。
轉(zhuǎn)載于:https://www.cnblogs.com/lin-jing/p/8505668.html
總結(jié)
以上是生活随笔為你收集整理的Knowledge Point 20180305 数据在计算机中的表示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 江山多少钱啊?
- 下一篇: 6.微信小程序的如何使用全局属性