【发布时间】:2014-03-19 16:21:38
【问题描述】:
这些代码行:
long duration;
duration = (long)(500*g_sampleTimeInSeconds) / 60;
printf("Memory will fill up after %d minutes\n", duration);
当 g_sampleTimeInSeconds 大于 65 时产生负数。当 g_sampleTimeInSeconds = 65 时,打印的数字是 541,但当它是 66 时,打印的数字是 -542 而不是正确的 550。当 g_sampleTimeInSeconds 时也是如此替换为硬编码值。
此代码使用 XC8 编译器编译,可在 Microchip PIC 上运行
更新:
g_sampleTimeInSeconds 是一个 16 位整数
【问题讨论】:
-
请显示 g_sampleTimeInSecond 的数据类型
-
更改为
(500L*g_sampleTimeInSeconds) / 60; -
@chux 你的方法也有效 - 似乎只有一个乘法操作数需要转换为 long 才能工作
-
注:应加
l:printf("Memory will fill up after %ld minutes\n", duration);