版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、為什么short整型(16位)的范圍是-32768到32767?計(jì)算機(jī)為什么要用反碼存儲(chǔ)整型這得從二進(jìn)制的原碼說(shuō)起:如果以最高位為符號(hào)位,二進(jìn)制原碼最大為0111111111111111=2的15次方減1=32767最小為1111111111111111=-2的15次方減1=-32767此時(shí)0有兩種表示方法,即正0和負(fù)0:0000000000000000=1000000000000000=0所以,二進(jìn)制原碼表示時(shí),范圍是-32767-0和032767,因?yàn)橛袃蓚€(gè)零的存在,所以不同的數(shù)值個(gè)數(shù)一共只有2的16次方減1個(gè),比16位二進(jìn)制能夠提供的2的16次方個(gè)編碼少1個(gè)。但是計(jì)算機(jī)中采用二進(jìn)制補(bǔ)碼存
2、儲(chǔ)數(shù)據(jù),即正數(shù)編碼不變,從0000000000000000到0111111111111111依舊表示0到32767,而負(fù)數(shù)需要把除符號(hào)位以后的部分取反加1,即-32767的補(bǔ)碼為1000000000000001。到此,再來(lái)看原碼的正0和負(fù)0:0000000000000000和1000000000000000,補(bǔ)碼表示中,前者的補(bǔ)碼還是0000000000000000,后者經(jīng)過(guò)非符號(hào)位取反加1后,同樣變成了0000000000000000,也就是正0和負(fù)0在補(bǔ)碼系統(tǒng)中的編碼是一樣的。但是,我們知道,16位二進(jìn)制數(shù)可以表示2的16次方個(gè)編碼,而在補(bǔ)碼中零的編碼只有一個(gè),也就是補(bǔ)碼中會(huì)比原碼多一個(gè)編
3、碼出來(lái),這個(gè)編碼就是1000000000000000,因?yàn)槿魏我粋€(gè)原碼都不可能在轉(zhuǎn)成補(bǔ)碼時(shí)變成1000000000000000。所以,人為規(guī)定1000000000000000這個(gè)補(bǔ)碼編碼為-32768。所以,補(bǔ)碼系統(tǒng)中,范圍是-2376832767。因此,實(shí)際上,二進(jìn)制的最小數(shù)確實(shí)是1111111111111111,只是二進(jìn)制補(bǔ)碼的最小值才是1000000000000000,而補(bǔ)碼的1111111111111111是二進(jìn)制值的-1。補(bǔ)碼原碼、反碼、補(bǔ)碼數(shù)值在計(jì)算機(jī)中表示形式為機(jī)器數(shù),計(jì)算機(jī)只能識(shí)別0和1,使用的是二進(jìn)制,而在日常生活中人們使用的是十進(jìn)制,"正如亞里士多德早就指出的那樣
4、,今天十進(jìn)制的廣泛采用,只不過(guò)我們絕大多數(shù)人生來(lái)具有10個(gè)手指頭這個(gè)解剖學(xué)事實(shí)的結(jié)果.盡管在歷史上手指計(jì)數(shù)(5,10進(jìn)制)的實(shí)踐要比二或三進(jìn)制計(jì)數(shù)出現(xiàn)的晚."(摘自<<數(shù)學(xué)發(fā)展史>>有空大家可以看看哦,很有意思的).為了能方便的與二進(jìn)制轉(zhuǎn)換,就使用了十六進(jìn)制(24)和八進(jìn)制(23).下面進(jìn)入正題.數(shù)值有正負(fù)之分,計(jì)算機(jī)就用一個(gè)數(shù)的最高位存放符號(hào)(0為正,1為負(fù)).這就是機(jī)器數(shù)的原碼了.假設(shè)機(jī)器能處理的位數(shù)為8.即字長(zhǎng)為1byte,原碼能表示數(shù)值的范圍為(-127-0+0127)共256個(gè).有了數(shù)值的表示方法就可以對(duì)數(shù)進(jìn)行算術(shù)運(yùn)算.但是很快就發(fā)現(xiàn)用帶符號(hào)位的原碼
5、進(jìn)行乘除運(yùn)算時(shí)結(jié)果正確,而在加減運(yùn)算的時(shí)候就出現(xiàn)了問(wèn)題,如下:假設(shè)字長(zhǎng)為8bits(1)10-(1)10=(1)10+(-1)10=(0)10(00000001)原+(10000001)原=(10000010)原=(-2)顯然不正確.因?yàn)樵趦蓚€(gè)整數(shù)的加法運(yùn)算中是沒(méi)有問(wèn)題的,于是就發(fā)現(xiàn)問(wèn)題出現(xiàn)在帶符號(hào)位的負(fù)數(shù)身上對(duì)除符號(hào)位外的其余各位逐位取反就產(chǎn)生了反碼.反碼的取值空間和原碼相同且一一對(duì)應(yīng)卜面是反碼的減法運(yùn)算(0)10(1)10-(1)10=(1)10+(-1)10=(00000001)反+(11111110)反=(11111111)反=(-0)有問(wèn)題.(1)10-(2)10=(1)10+(-2
6、)10=(-1)10(00000001)反+(11111101)反=(11111110)反=(-1)正確問(wèn)題出現(xiàn)在(+0)和(-0)上,在人們的計(jì)算概念中零是沒(méi)有正負(fù)之分的.(印度人首先將零作為標(biāo)記并放入運(yùn)算之中,包含有零號(hào)的印度數(shù)學(xué)和十進(jìn)制計(jì)數(shù)對(duì)人類(lèi)文明的貢獻(xiàn)極大).于是就引入了補(bǔ)碼概念.負(fù)數(shù)的補(bǔ)碼就是對(duì)反碼加一,而正數(shù)不變,正數(shù)的原碼反碼補(bǔ)碼是一樣的.在補(bǔ)碼中用(-128)代替了(-0),所以補(bǔ)碼的表示范圍為:(-1280127)共256個(gè).補(bǔ)碼的加減運(yùn)算如下注意:(-128)沒(méi)有相對(duì)應(yīng)的原碼和反碼,(-128)=(10000000)(1)10-(1)10=(1)10+(-1)10=(0)
7、10(00000001)補(bǔ)+(11111111)補(bǔ)=(00000000)補(bǔ)=(0)正確(1)10-(2)10=(1)10+(-2)10=(-1)10(00000001)補(bǔ)+(11111110)補(bǔ)=(11111111)補(bǔ)=(-1)正確所以補(bǔ)碼的設(shè)計(jì)目的是使符號(hào)位能與有效值部分一起參加運(yùn)算,從而簡(jiǎn)化運(yùn)算規(guī)則使減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線(xiàn)路設(shè)計(jì)所有這些轉(zhuǎn)換都是在計(jì)算機(jī)的最底層進(jìn)行的,而在我們使用的匯編、C等其他高級(jí)語(yǔ)言中使用的都是原碼??戳松厦孢@些大家應(yīng)該對(duì)原碼、反碼、補(bǔ)碼有了新的認(rèn)識(shí)了吧!有網(wǎng)友對(duì)此做了進(jìn)一步的總結(jié):本人大致總結(jié)一下:1、在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來(lái)表示
8、(存儲(chǔ))。主要原因:使用補(bǔ)碼,可以將符號(hào)位和其它位統(tǒng)一處理;同時(shí),減法也可按加法來(lái)處理。另外,兩個(gè)用補(bǔ)碼表示的數(shù)相加時(shí),如果最高位(符號(hào)位)有進(jìn)位,則進(jìn)位被舍棄。2、補(bǔ)碼與原碼的轉(zhuǎn)換過(guò)程幾乎是相同的。數(shù)值的補(bǔ)碼表示也分兩種情況:(1)正數(shù)的補(bǔ)碼:與原碼相同。例如,+9的補(bǔ)碼是00001001。(2)負(fù)數(shù)的補(bǔ)碼:符號(hào)位為1,其余位為該數(shù)絕對(duì)值的原碼按位取反;然后整個(gè)數(shù)加1。例如,-7的補(bǔ)碼:因?yàn)槭秦?fù)數(shù),則符號(hào)位為“1100,0011為;其余7位為-7的絕對(duì)彳1+7的原碼0000111按位取反為1111000;再加1,所以-7的補(bǔ)碼是11111001。已知一個(gè)數(shù)的補(bǔ)碼,求原碼的操作分兩種情況:0&
9、quot;,表示是一個(gè)正數(shù),所以補(bǔ)碼就是該數(shù)的原碼。1",表示是一個(gè)負(fù)數(shù),求原碼的操作可以是:符號(hào)位為,其,則原碼是10000111(-7):因?yàn)榉?hào)位為“1”,表示(1)如果補(bǔ)碼的符號(hào)位為“(2)如果補(bǔ)碼的符號(hào)位為“余各位取反,然后再整個(gè)數(shù)加1。例如,已知一個(gè)補(bǔ)碼為111110017位1供僚01取反后為0000110;再加1,所是一個(gè)負(fù)數(shù),所以該位不變,仍為“以是10000111。在“閑扯原碼、反碼、補(bǔ)碼”文件中,沒(méi)有提到一個(gè)很重要的概念“?!?。我在這里稍微介紹一下“?!钡母拍睿骸澳!笔侵敢粋€(gè)計(jì)量系統(tǒng)的計(jì)數(shù)范圍。如時(shí)鐘等。計(jì)算機(jī)也可以看成一個(gè)計(jì)量機(jī)器,它也有一個(gè)計(jì)量范圍,即都存在一
10、個(gè)“?!?。例如:時(shí)鐘的計(jì)量范圍是011,模=12。表示n位的計(jì)算機(jī)計(jì)量范圍是02(n)-1,模=2(n)?!咀ⅲ簄表示指數(shù)】“?!睂?shí)質(zhì)上是計(jì)量器產(chǎn)生“溢出”的量,它的值在計(jì)量器上表示不出來(lái),計(jì)量器上只能表示出模的余數(shù)。任何有模的計(jì)量器,均可化減法為加法運(yùn)算。例如:假設(shè)當(dāng)前時(shí)針指向10點(diǎn),而準(zhǔn)確時(shí)間是6點(diǎn),調(diào)整時(shí)間可有以下兩種撥法:一種是倒撥4小時(shí),即:10-4=6另一種是順撥8小時(shí):10+8=12+6=6在以12模的系統(tǒng)中,加8和減4效果是一樣的,因此凡是減4運(yùn)算,都可以用加8來(lái)代替。對(duì)“?!倍?,8和4互為補(bǔ)數(shù)。實(shí)際上以12模的系統(tǒng)中,11和1,10和2,9和3,7和5,6和6都有這個(gè)特性。
11、共同的特點(diǎn)是兩者相加等于模。對(duì)于計(jì)算機(jī),其概念和方法完全一樣。n位計(jì)算機(jī),設(shè)n=8,所能表示的最大數(shù)是11111111,若再加1稱(chēng)為100000000(9位),但因只有8位,最高位1自然丟失。又回了00000000,所以8位二進(jìn)制系統(tǒng)的模為2(8)。在這樣的系統(tǒng)中減法問(wèn)題也可以化成加法問(wèn)題,只需把減數(shù)用相應(yīng)的補(bǔ)數(shù)表示就可以了。把補(bǔ)數(shù)用到計(jì)算機(jī)對(duì)數(shù)的處理上,就是補(bǔ)碼。/關(guān)于算術(shù)運(yùn)算的溢出問(wèn)題,曾經(jīng)我也迷茫過(guò),而且不知道為什么整型變量溢出后會(huì)是模運(yùn)算的結(jié)果呢,以前還以為是不可以預(yù)測(cè)的,不過(guò)弄懂了原碼、補(bǔ)碼的概念后,就發(fā)現(xiàn)其實(shí)都是有規(guī)律可循的,如果你還不太清楚補(bǔ)碼什么東西,建議先看看隨筆計(jì)算機(jī)中的原
12、碼、反碼和補(bǔ)碼,弄清楚整型數(shù)據(jù)在計(jì)算機(jī)中是如何儲(chǔ)存的。在那篇文中,我們講述了為什么我們把-1強(qiáng)制成無(wú)符號(hào)短整型輸出后會(huì)得到65535,在這里我們不對(duì)它進(jìn)行類(lèi)型轉(zhuǎn)換,我們只是超出它的范圍看看。還是定義一個(gè)2字節(jié)大小的短整型shortshortn;,學(xué)了前面的知識(shí),我們知道這里n的范圍是-3276832767,而且通過(guò)前面知識(shí)我們也知道:這里的-32768在計(jì)算機(jī)中特殊表示為10000000000000000-32767是00000000000000000111111111111111-1-32767是11111111111111111000000000000001當(dāng)我們賦值n=32767,我們先
13、n+1,超出它的范圍,再輸出n看看,結(jié)果是-32768,為什么?我們來(lái)分析一下,32767在內(nèi)存中是以0111111111111111儲(chǔ)存的,我們對(duì)這個(gè)二進(jìn)制碼加1運(yùn)算看看,結(jié)果是1000000000000000,它表示的數(shù)是多少,哈哈,這不就是-32768嗎?不甘心,也許是巧合呢,那我們?cè)偌?看看,結(jié)果是1000000000000001,表示的是-32767,再多試幾個(gè)也一樣的。哦,原來(lái)不是巧合呀,正因?yàn)槿绱?,所以我們就不用這么繁瑣了,直接進(jìn)行模運(yùn)算就可以了!???什么是模運(yùn)算?昏模運(yùn)算就是除整取余的運(yùn)算。下面我把書(shū)上的例子再拿出來(lái)給你講你就明白了。在16位機(jī)器上進(jìn)行下面的操作:為什么強(qiáng)調(diào)16位機(jī)器?因?yàn)?6位機(jī)器上的short型的存儲(chǔ)空間是2個(gè)字節(jié)shortweight=42896;如果你把輸出,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)入股權(quán)益分配協(xié)議
- 跨國(guó)工程項(xiàng)目貸款合同示范文本
- 商品雞苗購(gòu)銷(xiāo)協(xié)議書(shū)2024年
- 第5章-核反應(yīng)堆流體力學(xué)-核工程概論課件
- 商用場(chǎng)所裝修合同
- 加工貿(mào)易協(xié)議范本
- 大數(shù)據(jù)分析技術(shù)合作合同樣本
- 授權(quán)額度借款合同范本
- 餐廳轉(zhuǎn)讓合同書(shū)
- 應(yīng)屆畢業(yè)生就業(yè)實(shí)習(xí)合同樣本
- 對(duì)數(shù)函數(shù)的圖像和性質(zhì)》說(shuō)課稿
- 出租房退房驗(yàn)收表
- 常用外窗及幕墻熱工性能參數(shù)
- 物業(yè)安全檢查記錄表(共7頁(yè))
- 個(gè)人住房情況承諾書(shū)
- 國(guó)學(xué)經(jīng)典文化PPT課件
- GB_T 14976-2012流體輸送用不銹鋼無(wú)縫鋼管
- 導(dǎo)數(shù)概念ppt課件
- 旋翼式水表的結(jié)構(gòu)和工作原理(共21頁(yè))
- Mathcad操作指南(2)
- 大水學(xué)校德育活動(dòng)記錄
評(píng)論
0/150
提交評(píng)論