c51 的简单的计算为什么不对?? scon = 0x52; /* scon */ /* setup serial port control */
tmod = 0x20; /* tmod */ /* hardware (2400 baud @12mhz) */
tcon = 0x69; /* tcon */
th1 = 0xf3; /* th1 */
a=12345;
b=100;
z=(long)(a*b);
printf (" z=%ld\n",z);
}
结果应该是1234500;可是显示确是54852;?



b>=6时结果已经错误!z没有被定义 u
将程序改为 z=(unsigned l
其实你在计算的时候已经有溢出! z=(long)(a*b);
a*b 已经溢出然后再把它转换成Long的已经没有意义!
必须在计算前就转换,a,或b 都可以!
你可以这样做做实验,
z=(long)a*b; //转换a 为long ;编译器自动把 a*b转换成long型的运算!
z=a*(long)b; //同样的道理;
结果都是1234500.

谢谢