STC单片机赋值问题
时间:10-02
整理:3721RD
点击:
今天在调试串口的发现一个问题:
Uart_Test[0] = 256 - (12000000 * 2) / (32 * 19200);
Uart_Test[1] = 256 - 12000000 * 2 / 32 / 19200;
这两个值不相等?我用VC6.0去写是相等的,请各位大侠帮忙分析下,谢谢!
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也会有的。之前写一个程序,使用了一个比较长的表达式,结果程序出错了,查了很久才发现是运算有问题,把表达式分成两部分进行计算然后就正确了。可能是编译器支持的运算数据长度问题,所以一般情况下我都不会让程序直接计算大数据,而是拆分成小数据【化简】或用多个公式去表示。