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行目でエラーが発生しないのはなぜですか?
sizeof(short)
2 行目は、私のシステムでは 2 バイトとして出力されます。a & b は短い整数であるため、2 バイトまたは 16 ビット長です。しかし、3行目はエラーをスローしません。語長が 16 ビットのみの場合、31 ビットの左シフトはどの程度可能ですか??
4 行目と 5 行目に暗黙的な変換はありますか?
64 ビット Mac で GCC コンパイラを使用しています。