[quote=接收]51c语言的疑惑。。
谢谢[/quote]
这是个隐式转换的问题
长整数型的10000应该写成 10000l
如果写成10000,因为i是unsigned char,在i*10000运算中,最大的数据类型是10000,即unsigned int,所以c就会按照unsigned int类型计算,结果当然就是溢出,高位丢失了。
前面的freq=99900这句话也是不规范的,应该写成freq=99900l,但是因为这个数比65535大,所以keil会把它当成长整数型来处理。
另外,没必要把运算一直放在循环里。
解决的方法是:
#include "reg51.h"
void main()
{
unsigned long freq,tmp;
long temp;
unsigned char i=9;
freq=99900l;
tmp=freq;
temp=i*10000l;
while(1);
}