4

私の質問は、C# コンソール プログラミングのこのコードについてです。例を挙げて質問します。

このコードは不可能です:

byte sum = (byte)(150 + 150); //impossible

しかし、このコードは可能です:

byte sum = unchecked((byte)(150 + 150)); //possible

私の質問は次のとおりです。どのように機能しuncheckedますか? UNCHECKEDつまり、このコードをどのように可能にするのですか?

4

2 に答える 2

7

チェックされていないすべての手段は、値がオーバーフローした場合 (MaxValueまたは境界を越えた場合MinValue)、エラーがスローされず、ラップアラウンドが発生することを許可します。

byte.MaxValue255150 + 150です300。_ オーバーフローを許可することで、境界を越えて(この場合は )255から再びカウントを開始し、最終値( )に到達します。byte.MinValue044(150 + 150) - 256 = 44

于 2013-08-05T20:31:35.967 に答える
3

オーバーフローは、式のすべての項が定数であるため、コンパイル時に検出できます。

これに置き換えると

int i = 150;
byte sum = (byte)(i + i);

それはうまくコンパイルされます。

uncheckedを使用することで、あなたはsuppressing overflow-checking.

これでもコンパイルされません-

const int i = 150;
byte sum = (byte)(i + i);

constコンパイル時に使用できるようにするキーワードの使用のためです。

于 2013-08-05T20:33:44.570 に答える