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

[复制链接]
3379|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 | 显示全部楼层
溢出了...
原野之狼 发表于 2012-2-24 22:31 | 显示全部楼层
a = 1000000/(100UL*400/60);
i7gly 发表于 2012-2-24 22:39 | 显示全部楼层
uint最大值是65536,显然溢出了,用long int
 楼主| 彪哥 发表于 2012-2-24 22:53 | 显示全部楼层
怎么会溢出呢?a的结果最后肯定是小于0xFFFF的呀,而且我将a 定义为ulong后,其结果为0xfffffd60,为什么呀?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 彪哥 发表于 2012-2-24 22:56 | 显示全部楼层
本帖最后由 彪哥 于 2012-2-24 22:58 编辑

请问5楼:
a = 1000000/(100UL*400/60);
这么改是什么意思呀?这样改果然行了,可是我不明白为什么这么改,Ul是定义什么的呀?
这里的100其实是个接收到的变量,这样又该怎样写呀?不能在变量后面直接加UL呀.
 楼主| 彪哥 发表于 2012-2-24 23:05 | 显示全部楼层
刚才又试,明白了,要保持数据对齐,哈哈哈,多谢各位帮助!全部弄成UL~~~~
nongfuxu 发表于 2012-2-25 19:08 | 显示全部楼层
a = 1000000/(100*400/60);
  b = a;
  c = a>>8;

编译器只按自己的逻辑编译代码。LZ最好直接写细腻点,不要让它猜想你需要做什么。
luo90049576 发表于 2012-2-25 21:23 | 显示全部楼层
懂不到 刚开始学
suse-lj 发表于 2012-3-1 14:39 | 显示全部楼层
有必要弄这么复杂啊
yycah 发表于 2012-3-1 18:07 | 显示全部楼层
学习学习1
救火车 发表于 2012-3-2 20:43 | 显示全部楼层
单片机的内存小,速度慢,所以编程时尽量把算式化简一些。
救火车 发表于 2012-3-2 20:44 | 显示全部楼层
单片机的内存小,速度慢,所以编程时尽量把算式化简一些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

171

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部