打印

不明白这段程序的计算结果为啥不对

[复制链接]
2621|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
彪哥|  楼主 | 2012-2-24 21:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
while(1)
{
  a = 1000000/(100*400/60);
  b = a;
  c = a>>8;
  }

想把a的值分成高低两个字节送给b、c,可是输出的结果和自己用计算器算的结果不一样,是用KEIL看的,不制动为什么。主要是A的值计算出来的不对,高低字节赋值是对的。
按照上面这段程序,得到的A的结果是0xf6d0,可计算器算出来是0x05dd,为什么呢?

相关帖子

沙发
aihe| | 2012-2-24 21:30 | 只看该作者
先问一下a、b、c的数据类型

使用特权

评论回复
板凳
彪哥|  楼主 | 2012-2-24 22:03 | 只看该作者
这里忘了写了,uint a;  
                  uchar b,c;
程序里是有的。

使用特权

评论回复
地板
ningling_21| | 2012-2-24 22:25 | 只看该作者
溢出了...

使用特权

评论回复
5
原野之狼| | 2012-2-24 22:31 | 只看该作者
a = 1000000/(100UL*400/60);

使用特权

评论回复
6
i7gly| | 2012-2-24 22:39 | 只看该作者
uint最大值是65536,显然溢出了,用long int

使用特权

评论回复
7
彪哥|  楼主 | 2012-2-24 22:53 | 只看该作者
怎么会溢出呢?a的结果最后肯定是小于0xFFFF的呀,而且我将a 定义为ulong后,其结果为0xfffffd60,为什么呀?

无标题.jpg (26 KB )

无标题.jpg

使用特权

评论回复
8
彪哥|  楼主 | 2012-2-24 22:56 | 只看该作者
本帖最后由 彪哥 于 2012-2-24 22:58 编辑

请问5楼:
a = 1000000/(100UL*400/60);
这么改是什么意思呀?这样改果然行了,可是我不明白为什么这么改,Ul是定义什么的呀?
这里的100其实是个接收到的变量,这样又该怎样写呀?不能在变量后面直接加UL呀.

使用特权

评论回复
9
彪哥|  楼主 | 2012-2-24 23:05 | 只看该作者
刚才又试,明白了,要保持数据对齐,哈哈哈,多谢各位帮助!全部弄成UL~~~~

使用特权

评论回复
10
nongfuxu| | 2012-2-25 19:08 | 只看该作者
a = 1000000/(100*400/60);
  b = a;
  c = a>>8;

编译器只按自己的逻辑编译代码。LZ最好直接写细腻点,不要让它猜想你需要做什么。

使用特权

评论回复
11
luo90049576| | 2012-2-25 21:23 | 只看该作者
懂不到 刚开始学

使用特权

评论回复
12
suse-lj| | 2012-3-1 14:39 | 只看该作者
有必要弄这么复杂啊

使用特权

评论回复
13
yycah| | 2012-3-1 18:07 | 只看该作者
学习学习1

使用特权

评论回复
14
救火车| | 2012-3-2 20:43 | 只看该作者
单片机的内存小,速度慢,所以编程时尽量把算式化简一些。

使用特权

评论回复
15
救火车| | 2012-3-2 20:44 | 只看该作者
单片机的内存小,速度慢,所以编程时尽量把算式化简一些。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

1

粉丝