JMemo036

キャストによる値の変化 ~-10000が55536になるわけ~

次のようなコードを実行すると、「55536」と表示される。

int a1 = -10000;
char c = (char)a1;
int a2 = (int)c;
System.out.println(a2);

「-10000」を二進数で表すと、

1111111111111111111111111111111111111111111111111101100011110000

になる。
charは2バイト、つまり16ビットまでしか扱えないので、charにキャストすると下位16ビットだけ取り出され、上位ビットは切り捨てられる。そうすると

1101100011110000

となる。これは10進数で言うと「55536」になる。 だから、「55536」と表示される。

最終更新:2013年04月09日 17:05