演算子と判定構造の使用について(テスト対策)
▼コンパイルエラーになる文を選んでください
- byte a = 0b10000000;
- short b = 128 + 128;
- int c = 2 * 3L;
- float d = 10.0;
答えは
1、3、4
・型変換の時、大きな範囲の値を小さな変数に代入するときは、キャストが必要!
・byteやshort型の変数に代入する整数リテラルの場合、この値が型の範囲内かどうかのチェックが大事!
・byte⇒-128~127 よって1は誤り。ただし、明示的にキャストすればコンパイルエラーにはならない
例)byte = (byte) 0b10000000;
・選択肢2は、int型のリテラル同士の演算であるからint型のデータになるが、この演算結果の256はshort型の範囲内(‐32768~32767)であるのでコンパイルエラーにはならない
・数値を演算するとき、オペランド(演算の対象となる値や変数、定数などのこと)の型が異なる場合、小さいほうの型は大きいほうの型に自動変換される。選択肢3は、オペランドのリテラルにlong型を表す接尾辞(L)がついているため、int型とlong型の演算となるこの式は、演算子の左ぺランドをlong型に変換してから演算される。よって
int c = 6L;
と同等の意味になる。long型の値をint型の変数に代入することはできないので、コンパイルエラーとなる。
・整数リテラルのデフォルトの型はint型だが、浮動小数点数リテラルの場合にはdlubleがデフォルトの型。選択肢4はdouble型の値をより小さい範囲しか扱えないfloat型の変数に代入しようとしているためコンパイルエラー。