PIC8位MCU的內存都是8位位元組結構的,所以PICC中對於數據的劃分都是以8位為基礎的。 在彙編中,我們對一個地址為0X20的內存附值: movlw 255; movwf 0x20; 但一個內存是8位結構,能表示最大的數是255。要是超過了會怎麼樣呢? movlw 256; movwf 0x20; 通過DEBUG后,可以看出0X20中的值不是256,而是0了。 這裡可以看出PIC處理器計算過程是當計算結果超過內存能容納的最大數(也就是所謂溢出),則自動拋棄最高位。 如下: 255 - 256 11111111-100000000 256的2進位有9位,於是PIC處理器就自動拋棄最高位1,剩下的8個0放入內存,於是就成了0了。這過程是由硬體自動完成的。 在PICC中象這樣的概驗比比都是。 如:char x; for(x=255;x--;){;} 是完成255個循環。 要是for(x=256;x--;){;} 則是0個循環。 因為PICC中定義CHAR類型數據是8位。 再如:int x; for(x=65537;x--){;} 則是只循環一次。因為PICC中INT數據是16位,佔2個存儲單位。 如上所述,在規劃一個程序之前要考慮程序中可能涉及到的最大計算量來定義數據類型,不然將會發生溢出,導致數據混亂。 但也不可為了簡便,全用長結構的類型來申明數據類型,不然會導致計算時間慢,空間佔用多。 如X可能大於255,但不會大於65535,那麼申明:unsigned int x; 如果X可能會是負數就一定要定義int x; 同上要是X可能大於65535,那麼就得定義long x; 浮點數是一個很特殊的類型,不需要了解它的構造,只需要了解它是一個24位或32位的存儲結構,是一個能表示小數的數據類型,浮點表示的數字範圍極大,所以在用浮點類型時候,不需要考慮是否溢出的問題。 |
[admin via 研發互助社區 ] PIC8位在PICC中的數據類型已經有2714次圍觀
http://cocdig.com/docs/show-post-380.html