【发布时间】:2020-05-06 19:29:08
【问题描述】:
见我下面的代码。我很困惑为什么我需要先将变量 var_u16 转换为 int16_t 然后再转换为 int32_t 以正确解释为 MyFunc( )。
我原以为var_u16 的最高有效位为 1,当简单地转换为 int32_t 时,编译器会理解这是一个负值。
相反,它仍然被解释为无符号值。为什么需要先将中间转换为 int16_t?
我正在使用 gcc 8.3.0
#include <stdio.h>
void MyFunc(int32_t s32Var)
{
printf("%d\n", s32Var);
}
int main()
{
uint16_t var_u16 = 0x8000;
MyFunc((int32_t)var_u16); // prints 32768
MyFunc((int32_t)(int16_t)var_u16); // prints -32768
return 0;
}
【问题讨论】:
标签: c casting type-conversion unsigned signed