以下代码在 CodeBlocks 编译器上运行良好,但在 MPLAB C18 编译器上我没有得到相同的结果。我正在使用 PIC18 微 Controller 。
代码
int d[6];
int all;
d[0] = 6;
d[1] = 4;
d[2] = 8;
d[3] = 0;
d[4] = 0;
all = 10000*d[0] + 1000*d[1] + 100*d[2] + 10*d[3] + d[4];
printf("%d", all);
CodeBlocks 上的输出:64800
MPLAB 输出:-816
究竟是什么问题?这段代码不应该工作正常吗?谢谢!
最佳答案
int
类型的对象不能保证能够存储超过 -32767
或 32767
的值。您的 Code::Blocks 实现恰好扩展了这个范围,但是您的 MPLAB C18 实现(顺便说一下,这并不是真正有效的 C 实现)。您在 MPLAB 实现中看到的是由于有符号整数溢出导致的未定义行为。使用 unsigned
类型和/或更宽的类型,例如 long
或 long long
。不要忘记相应地修改您的 printf 格式说明符。 %u
代表unsigned int
,%ld
代表long
,%lu
代表unsigned long
, %lld
for long long
, 等等...
关于c - 如何将数组中的值存储到 MPLAB 上的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403009/