c數(shù)據(jù)類型轉(zhuǎn)換及操作_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、voidfoo(void)unsignedinta=6intb=20(ab6)puts(“6“):puts(“6”。原因是當(dāng)表達(dá)式中存在有符號(hào)類型和無符號(hào)類型時(shí)所有的操作數(shù)都自動(dòng)轉(zhuǎn)換為無符號(hào)類型。因此20變成了一個(gè)非常大的正整數(shù),所以該表達(dá)式計(jì)算出的結(jié)果大于6。這一點(diǎn)對(duì)于應(yīng)當(dāng)頻繁用到無符號(hào)數(shù)據(jù)類型的嵌入式系統(tǒng)來說是豐常重要的。如果你答錯(cuò)了這個(gè)問題,你也就到了得不到這份工作的邊緣在匯編語言層面,聲明變量的時(shí)候,沒有signed和unsig

2、nde之分,匯編器統(tǒng)統(tǒng),將你輸入的整數(shù)字面量當(dāng)作有符號(hào)數(shù)處理成補(bǔ)碼存入到計(jì)算機(jī)中,只有這一個(gè)標(biāo)準(zhǔn)!匯編器不會(huì)區(qū)分有符號(hào)還是無符號(hào)然后用兩個(gè)標(biāo)準(zhǔn)來處理,它統(tǒng)統(tǒng)當(dāng)作有符號(hào)的!并且統(tǒng)統(tǒng)匯編成補(bǔ)碼!也就是說,db20匯編后為:EC,而db236匯編后也為EC。這里有一個(gè)小問題,思考深入的朋友會(huì)發(fā)現(xiàn),db是分配一個(gè)字節(jié),那么一個(gè)字節(jié)能表示的有符號(hào)整數(shù)范圍是:128~127,那么db236超過了這一范圍,怎么可以?是的,236的補(bǔ)碼的確超出了一個(gè)字

3、節(jié)的表示范圍,那么拿兩個(gè)字節(jié)(當(dāng)然更多的字節(jié)更好了)是可以裝下的,應(yīng)為:00EC,也就是說236的補(bǔ)碼應(yīng)該是00EC,一個(gè)字節(jié)裝不下,但是,別忘了“截?cái)唷边@個(gè)概念,就是說最后匯編的結(jié)果被截?cái)嗔耍?0EC是兩個(gè)字節(jié),被截?cái)喑蒃C,所以,這是個(gè)“美麗的錯(cuò)誤”,為什么這么說?因?yàn)?,?dāng)你把236當(dāng)作無符號(hào)數(shù)時(shí),它匯編后的結(jié)果正好也是EC,這下皆大歡喜了,雖然匯編器只用一個(gè)標(biāo)準(zhǔn)來處理,但是借用了“截?cái)唷边@個(gè)美麗的錯(cuò)誤后,得到的結(jié)果是符合兩個(gè)標(biāo)準(zhǔn)的

4、!也就是說,給你一個(gè)字節(jié),你想輸入有符號(hào)的數(shù),比如20那么匯編后的結(jié)果是符合有符號(hào)數(shù)的;如果你輸入236那么你肯定當(dāng)作無符號(hào)數(shù)來處理了(因?yàn)?36不在一個(gè)字節(jié)能表示的有符號(hào)數(shù)的范圍內(nèi)?。玫降慕Y(jié)果是符合無符號(hào)數(shù)的。于是給大家一個(gè)錯(cuò)覺:匯編器有兩套標(biāo)準(zhǔn),會(huì)區(qū)分有符號(hào)和無符號(hào),然后分別匯編。其實(shí),你們被騙了。:)3.第一點(diǎn)說明匯編器只用一個(gè)方法把整數(shù)字面量匯編成真正的機(jī)器數(shù)。但并不是說計(jì)算機(jī)不區(qū)分有符號(hào)數(shù)和無符號(hào)數(shù),相反,計(jì)算機(jī)對(duì)有符號(hào)和

5、無符號(hào)數(shù)區(qū)分的十分清晰,因?yàn)橛?jì)算機(jī)進(jìn)行某些同樣功能的處理時(shí)有兩套指令作為后備,這就是分別為有符號(hào)和無符號(hào)數(shù)準(zhǔn)備的。但是,這里要強(qiáng)調(diào)一點(diǎn),一個(gè)數(shù)到底是有符號(hào)數(shù)還是無符號(hào)數(shù),計(jì)算機(jī)并不知道,這是由你來決定的,當(dāng)你認(rèn)為你要處理的數(shù)是有符號(hào)的,那么你就用那一套處理有符號(hào)數(shù)的指令,當(dāng)你認(rèn)為你要處理的數(shù)是無符號(hào)的,那就用處理無符號(hào)數(shù)的那一套指令。加減法只有一套指令,因?yàn)檫@一套指令同時(shí)適用于有符號(hào)和無符號(hào)。下面這些指令:muldivmovzx…是處理

6、無符號(hào)數(shù)的,而這些:imulidivmovsx…是處理有符號(hào)的。舉例來說:內(nèi)存里有一個(gè)字節(jié)x為:0xEC,一個(gè)字節(jié)y為:0x02。當(dāng)把x,y當(dāng)作有符號(hào)數(shù)來看時(shí),x=20,y=2。當(dāng)作無符號(hào)數(shù)看時(shí),x=236,y=2。下定義INT16Sltr1=0ltr1if(ltr1==32767)ltr1=1ltr1=2當(dāng)ltr1等于32767時(shí),到了有符號(hào)整數(shù)的最大值,加1就是32768(0X8000)再加2就是32766(0X8002)6.INT

7、16UiINT16SkINT32Smbxk=pmes7mbx=0f(i=0iCOUNTOFCALSAMPi)324計(jì)算的周波mbx=kk=NUMOFCAL存放的是8個(gè)量ltr=labs(mbx)整型量的值有可能出現(xiàn)負(fù)值時(shí),當(dāng)需要提取負(fù)值時(shí)需要用labs取絕對(duì)值來反映其實(shí)際大小。ltr=(INT16U)(mbx)整型量的值有可能出現(xiàn)負(fù)值時(shí),當(dāng)mbx=6時(shí),即mbx=0xfffffffa這種強(qiáng)制轉(zhuǎn)換并不能得到我們想要的值,相反它的結(jié)果很大,

8、是fffa。7.INT16Sltr1INT16Ultr2,ltr3INT8UaINT16Sba=6b=20ltr1=abltr2=(INT16S)(ab)c=5d=15ltr3=cd這個(gè)值會(huì)得到5到15之間的距離。結(jié)果是:ltr1=14ltr2=65522ltr3=65526當(dāng)一個(gè)整型變量賦值給一個(gè)無符號(hào)的整型時(shí),數(shù)據(jù)格式不變,直接復(fù)制。ltr1本身是整型,ltr1=ab=0xfff2=14Ltr2本身是無符號(hào)整型ltr2=(INT16

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論