如何在MPLAB中将数组中的值存储到变量?

以下代码在CodeBlocks编译器上工作正常但在MPLAB C18编译器上我得不到相同的结果。 我正在使用PIC18单片机。

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类型的对象不能保证能够存储超过-3276732767值。 你的Code :: Blocks实现恰好扩展了这个范围,但是你的MPLAB C18实现(顺便说一下,它实际上不是一个有效的C实现)。 由于有符号整数溢出,您在MPLAB实现中看到的是未定义的行为。 使用unsigned类型和/或更宽类型,例如longlong long 。 不要忘记相应地修改printf格式说明符。 %u表示unsigned int%ld表示long%lu表示unsigned long%lld表示long long等等…

根据此链接 ,您的MCU是8位系统。 所以你的系统整数的长度是16位。 当您使用CodeBlocks模拟代码时,您使用32位系统(或64位系统)运行代码,整数大小为32位。 所以你不会得到相同的结果。 因为在你的MPLAP系统中,你会溢出整数大小