gpt4 book ai didi

将 uint8_t 转换为 int8_t

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:10 25 4
gpt4 key购买 nike

使用 Microchip XC8 我有一个构造

int16_t test;
uint8_t msb = 0xff;
uint8_t lsb = 0xf4;
uint8_t hyst = 0xff;

test = ((((int16_t)msb)<<8) + (int16_t)lsb) + (int8_t)hyst);

我希望测试为 -13 (oxFFF3),因为我使用了带符号的数字,但它被计算为 0xF3。

为什么?

编辑:尝试使用 gcc,结果符合我的预期。

最佳答案

正如 Olaf 正确指出的那样,如果 int 的宽度为 16,则移位操作可能没有定义的行为,因为您正在向 int16_t 的符号位移动一位.那么您的代码是错误的,您无法推断出您的平台可能实现的任何值(value)。

如果 int 较大,则表达式的一切都很好,您只是将适合 int 的正值相加。但是由于初始化,结果值将被转换回 int16_t,这会导致“实现定义”转换或信号的产生。所以你应该检查你的编译器文档你的平台在这些情况下做了什么,如果可以的话最好避免它。

关于将 uint8_t 转换为 int8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33917962/

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