質問: (byte)0b10000000; とした時にコンパイルエラーとならないのは何故でしょうか。 127を超える数値のため、明示的にint型に変換されることまでは理解しておりますが byte型にキャストしたとしても、byte型の扱う範囲を超えているはずです。 ご回答お願い致します。
回答: コンピュータはデータを「数値」としてではなく、「ビット」として見ています。 int型に2進表現で納められた`10000000`がbyteにキャストされる際、下位8ビットがbyte型の領域に収められ、その状態で数値解釈されるというだけの話です。 今回の場合は`10000000`がbyte型に収まり、これが2の補数表現と解釈され、-128とコンピュータがとらえます。