質問: (byte)( arrayByte[0] & 0xFF ); -----(5) (1)(2)(5) はエラーになりません。 (3)(4) は int を byte に暗黙的に変換できませんと言われます。 ひょっとして論理和とはいえ構文的には演算なので、 「桁上がり」が関係するのかと思い、(1)は 0xFF & 0xFF にしてみましたが、 エラーにはなりませんでした... (5)で解決するのですが、それなら(4) でも解決しそうなのですが... ちょっとモヤモヤするので質問させて頂きました。 アドバイスの程宜しくお願い致します。 ### 補足情報(言語/FW/ツール等のバージョンなど) visual studio 2013 .NET Framework 3.5
回答: リテラル(変数に代入されていない `0xFF` などの数値)や コンパイル時定数(const)同士の演算の場合、 ビルドの時点で値を確定することができるのでキャストが不要となるようです。 以下のようなコードで確認するとわかりやすいかと思います。 ``` const byte B1 = 0xFF; const byte B2 = 0xFF; byte data1 = B1 + B2; //NG byte data2 = B1 - B2; //OK ```