int main(void)
{
unsigned i = -23; // line 1
short a, b = 0x1;
printf("sizeof(short) = %i\n", (int)sizeof(short)); // line 2
a = b << 31; // line 3
printf("i = %i", i); // line 4
printf("i = %u", i); // line 5
return 0;
}
为什么指定类型修饰符 unsigned 时第 1 行没有给出任何错误?
第 2 行在我的系统中打印sizeof(short)
为 2 个字节。a & b 是短整数,因此 2 字节或 16 位长。但是第 3 行不会引发任何错误。当字长仅为 16 位时,如何左移 31 位?
第 4 行和第 5 行是否有任何隐式转换?
我在 64 位 Mac 上使用 GCC 编译器。