このコードをVSで記述した場合、機能しません( "'int'を'short'に暗黙的に変換できません。明示的な変換が存在します。キャストがありませんか?"):
short A = 5;
short B = 1 << A;
しかし、このコードは絶対に問題ありません。
short A = 1 << 5;
式全体を短くキャストすることでエラーを解消できることはわかっていますが、なぜこれが発生するのか誰かに教えてもらえますか?
Aはリテラルではないため、コンパイラは結果が。として表現可能であることを認識しませんshort
。したがって、明示的なキャストが必要です。リテラル5を使用すると、コンパイラーは結果が32であることを確認します。これは、に収まりshort
ます。
C#言語仕様4.0は6.1.9で次のように述べています。
int型の定数式(§7.18)は、定数式の値が宛先型の範囲内であれば、sbyte、byte、short、ushort、uint、またはulong型に変換できます。
定数式の変換は、これが暗黙的に行われる特殊なケースの1つです(6.1)。