gpt4 book ai didi

C语言: #DEFINEd value messes up 8-bit multiplication.为什么?

转载 作者:太空狗 更新时间:2023-10-29 17:17:08 26 4
gpt4 key购买 nike

我有以下 C 代码:

#define PRR_SCALE 255
...
uint8_t a = 3;
uint8_t b = 4;
uint8_t prr;
prr = (PRR_SCALE * a) / b;
printf("prr: %u\n", prr);

如果我编译它(使用 msp430 平台编译器,用于一个名为 contiki 的小型嵌入式操作系统),结果为 0,而我预期为 191。(uint8_t 被类型定义为无符号字符)

如果我把它改成:

uint8_t a = 3;
uint8_t b = 4;
uint8_t c = 255;
uint8_t prr;
prr = (c * a) / b;
printf("prr: %u\n", prr);

它运行正常并打印出 191。

在 Ubuntu 机器上使用 gcc 编译这个“正常”的简单版本在两种情况下都会打印出正确的值。

我不太确定这是为什么。我可以通过预先将 DEFINEd 值分配给变量来规避它,但我宁愿不这样做。

有人知道这是为什么吗?也许有指向更多相关信息的链接?

最佳答案

简短的回答:你的编译器有问题。 (正如其他人所建议的那样,溢出没有问题。)

在这两种情况下,算法都是在 int 中完成的,保证至少有 16 位长。在前一个片段中,因为 255 是一个 int,在后一个片段中,这是因为 integral promotion .

如您所述,gcc 可以正确处理此问题。

关于C语言: #DEFINEd value messes up 8-bit multiplication.为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com