类似于问题Bitshift and integer Promotion?,我有一个关于使用左移位时整数提升的问题。
unsigned int test(void)
{
unsigned char value8;
unsigned int result;
value8 = 0x12;
result = value8 << 8;
return result;
}
在这种情况下, value8 将首先提升为 unsiged int 还是特定于实现?
6.5.7 位移位运算符... 3 Sematics ...
整数提升在每个操作数上执行。结果的类型是提升的左操作数的类型。如果右操作数的值为负数或大于或等于提升的左操作数的宽度,则行为未定义。
它说“对每个操作数执行整数提升”。,但是这里的推广规则是什么?
我认为它应该是convert to int if lesser rank than int
,但我找不到它。
我问这个,因为一个编译器(Renesas nc30wa)没有升级为 int,所以我的样本的结果总是 0。
在这个平台上,char 为 8 位宽,int 为 16 位。