int から char への cast
今年の新人から、次のような質問
「int 型で宣言されている変数を char 型にキャストして代入したらどうなるのでしょう?」
int
main()
{
int i;
char c;
i = 123456;
c = (char)i;
printf(“d: %d\n”, c);
printf(“c: %d\n”, c);
return 0;
}
大きいサイズの型(int: 4byte)から小さいサイズの型(char: 1byte)へのキャストは
代入の際に先頭の3byte分が取り除かれます。
つまり 10進数123456は2進数で表すと11110001001000000となりますが
先頭の3byte(24bit分)が取り除かれてしまいますので、cに代入されるのは
01000000となります。
上の例では10進数と文字で出力していますので
64
@
が表示されます。
(@はASCII文字コードで64に割り当てられている文字です)
ちなみに明示的にキャストをしない場合でもコンパイラがよしなに変換して
いることがあるので注意が必要です。