| PIC8位MCU的內(nèi)存都是8位字節(jié)結(jié)構(gòu)的,所以PICC中對(duì)于數(shù)據(jù)的劃分都是以8位為基礎(chǔ)的。 在匯編中,我們對(duì)一個(gè)地址為0X20的內(nèi)存附值: movlw 255; movwf 0x20; 但一個(gè)內(nèi)存是8位結(jié)構(gòu),能表示最大的數(shù)是255。要是超過了會(huì)怎么樣呢? movlw 256; movwf 0x20; 通過DEBUG后,可以看出0X20中的值不是256,而是0了。 這里可以看出PIC處理器計(jì)算過程是當(dāng)計(jì)算結(jié)果超過內(nèi)存能容納的最大數(shù)(也就是所謂溢出),則自動(dòng)拋棄最高位。 如下: 255 - 256 11111111-100000000 256的2進(jìn)制有9位,于是PIC處理器就自動(dòng)拋棄最高位1,剩下的8個(gè)0放入內(nèi)存,于是就成了0了。這過程是由硬件自動(dòng)完成的。 在PICC中象這樣的概驗(yàn)比比都是。 如:char x; for(x=255;x--;){;} 是完成255個(gè)循環(huán)。 要是for(x=256;x--;){;} 則是0個(gè)循環(huán)。 因?yàn)镻ICC中定義CHAR類型數(shù)據(jù)是8位。 再如:int x; for(x=65537;x--){;} 則是只循環(huán)一次。因?yàn)镻ICC中INT數(shù)據(jù)是16位,占2個(gè)存儲(chǔ)單位。 如上所述,在規(guī)劃一個(gè)程序之前要考慮程序中可能涉及到的最大計(jì)算量來定義數(shù)據(jù)類型,不然將會(huì)發(fā)生溢出,導(dǎo)致數(shù)據(jù)混亂。 但也不可為了簡(jiǎn)便,全用長(zhǎng)結(jié)構(gòu)的類型來申明數(shù)據(jù)類型,不然會(huì)導(dǎo)致計(jì)算時(shí)間慢,空間占用多。 如X可能大于255,但不會(huì)大于65535,那么申明:unsigned int x; 如果X可能會(huì)是負(fù)數(shù)就一定要定義int x; 同上要是X可能大于65535,那么就得定義long x; 浮點(diǎn)數(shù)是一個(gè)很特殊的類型,不需要了解它的構(gòu)造,只需要了解它是一個(gè)24位或32位的存儲(chǔ)結(jié)構(gòu),是一個(gè)能表示小數(shù)的數(shù)據(jù)類型,浮點(diǎn)表示的數(shù)字范圍極大,所以在用浮點(diǎn)類型時(shí)候,不需要考慮是否溢出的問題。 |