私は C# に移行しようとしている Java プログラマーですが、この落とし穴には少し困惑しています。
int a = 1;
a = 0x08000000 | a;
a = 0x80000000 | a;
最初の行は問題なくコンパイルされます。2番目はそうではありません。符号ビットを持つ定数があることを認識しているようで、何らかの理由で結果を long にキャストすることを決定し、エラーが発生します。
タイプ 'long' を 'int' に暗黙的に変換することはできません。
明示的な変換が存在します (キャストがありませんか?)
これまでの修正は次のとおりです。
a = (int)(0x80000000 | a);
キャストを処理しますが、それでも警告が残ります:
符号拡張オペランドで使用されるビットごとの OR 演算子。
最初に小さい符号なし型にキャストすることを検討してください
これをエラー/警告/ロングフリーの方法で表現する正しい C# の方法は何でしょうか?