微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC单片机赋值问题

STC单片机赋值问题

时间:10-02 整理:3721RD 点击:
今天在调试串口的发现一个问题:
                    Uart_Test[0] = 256 - (12000000 * 2) / (32 * 19200);
                    Uart_Test[1] = 256 - 12000000 * 2 / 32 / 19200;
这两个值不相等?我用VC6.0去写是相等的,请各位大侠帮忙分析下,谢谢!

这个看编程规范吧。一般都不会采用第二种方法的,,具体原因C语言你也知道,,易读性。

认真看一下 编程的逻辑优先权吗

谢谢你的回复,但是关键是:
Uart_Test[1] = 256 - 12000000 * 2 / 32 / 19200;          这个才是正确的
Uart_Test[0] = 256 - (12000000 * 2) / (32 * 19200)      得到的结果不对
如果我改为NUM1 = 32 * 19200;    Uart_Test[0] = 256 - (12000000 * 2) / NUM1;得到的结果也是对的。
我不明白为什么KEIL2里面是这样的?

这个要看编译器用什么数据长度来计算,如果任何一步的计算结果、数据长度超出系统的数据长度,就会发生有效位丢失。

这种情况在Keil4也会有的。之前写一个程序,使用了一个比较长的表达式,结果程序出错了,查了很久才发现是运算有问题,把表达式分成两部分进行计算然后就正确了。可能是编译器支持的运算数据长度问题,所以一般情况下我都不会让程序直接计算大数据,而是拆分成小数据【化简】或用多个公式去表示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top