导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→c51 的简单的计算为什么不对??[mojianxiang]

 *第13975篇: c51 的简单的计算为什么不对??

  
楼 主:mojianxiang 2003年7月1日15:06
 c51 的简单的计算为什么不对??
#include   <stdio.h>  
#include   <aduc812.h>  
main()
{
  unsigned  int a,b;
  unsigned  long z;

  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;?

  
2楼:lichuanfa 2003年7月1日16:58
 b>=6时结果已经错误!z没有被定义 u
b>  =6时结果已经错误!z没有被定义 unsigned long
  
3楼:lichuanfa 2003年7月1日17:05
 将程序改为  z=(unsigned l
将程序改为  z=(unsigned long)a*b;可以了,注意优先级!!!!!!!!!!
  
4楼:guest 2003年7月1日18:34
 其实你在计算的时候已经有溢出!

z=(long)(a*b); 
a*b 已经溢出然后再把它转换成Long的已经没有意义!
必须在计算前就转换,a,或b 都可以!
你可以这样做做实验,
z=(long)a*b;   //转换a 为long ;编译器自动把 a*b转换成long型的运算!
z=a*(long)b;  //同样的道理;
结果都是1234500.

  
5楼:mojianxiang 2003年7月4日15:51
 谢谢
谢谢!!大侠

>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:看门狗复位芯片CAT1161?

[下一篇主题]:86的寻址?谢谢,急急急急急