在汇编中,我们对一个地址为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位的存储结构,是一个能表示小数的数据类型,浮点表示的数字范围极大,所以在用浮点类型时候,不需要考虑是否溢出的问题。