c - 如何将数组中的值存储到 MPLAB 上的变量中?

标签 c microcontroller mplab

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

关于c - 如何将数组中的值存储到 MPLAB 上的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403009/

相关文章:

random - 编程前的xc8随机数

c - MicroChip dsPic33,UART RX 中断未被调用

c - 如何跨进程共享ck_list?

c - 为什么从 int 的地址读回不给我返回 int 的正确值(C 和 gdb)

c - 如何重置 while 循环?

LED驱动器与Arduino上的模数转换之间的冲突

c - PIC32 SPI 不工作

C将文件读入二维数组

networking - 使用 HTTP 服务器和 SNMP 代理构建 AVR?

c - STM32 USB CDC 不工作