这是我遇到的RobotC 3.62问题的一个例子:
长标题;任务主(){ long num = 0; 标题= NUM + 90000;}这给出了heading = 24464的结果,这不是什么……
尝试制作 90000 长,即: 90000L.
90000
90000L.
long heading; task main() { long num = 0; heading = num + 90000L; }
这是3.X的一个已知问题,之前已针对4.X进行了修复,并在4.X的当前公开发布中得到了解决。但是,有一个3.x的解决方法。
使用您提供的代码,编译器输出仅通过执行整数数学来截断结果。这是以前发现的错误,后来修复了,但仍然存在于旧版本中......这是输出:
long num = 0; 0025: CB000000 num:S00(slong) = 0 // long/float heading = num + 90000; 0029: BD0800002B000000905F heading:G00(slong) = num:S00(slong) + 90000
作为3.X中的变通方法,如果通过指定将常量视为“浮点数” 90000.0 ,编译器将生成不会截断long的代码,因为它将执行32位级数学运算(在NXT上,“int”实际上是短整数,因此截断)
90000.0
long num = 0; 0025: CB000000 num:S00(slong) = 0 // long/float heading = num + 90000.0; 0029: AD2D04002B0000 S04(float) = num:S00(slong) // Store in temp variable :: Convert 'long' to 'float' 0030: 902D040000C8AF47 S04(float) += 90000 // Perform <op> on temp variable :: float 0038: 8C0800002D0400 heading:G00(slong) = S04(float) // Convert 'float' to 'long'