-4

次のことを試すと:

const int x = 1000;
byte b1 = (byte)x;

//Or

byte b2 = (byte)1000;

コンパイラは、定数 1000 を b1 または b2 に変換しなかったと主張しています。

しかし、私が次のことを試したとき:

const int x = 1000;
byte b1 = unchecked((byte)x);

//Or

byte b2 = unchecked((byte)1000);

このコードは正常に機能しました。なぜですか?

4

2 に答える 2

3

コンパイラは、定数 1000 を b1 または b2 に変換しなかったと主張しています。

はい。.NET Framework では、byteは 8 ビットの符号なし整数を表し、 から0までの値を保持できるため255です。

しかし、次のことを試してみると...このコードはうまくいきました.Why?

キーワードを使用uncheckedすると、オーバーフローにフラグが立てられなくなります。

チェックされていない環境が削除されると、コンパイル エラーが発生します。オーバーフローは、式のすべての項が定数であるため、コンパイル時に検出できます。

于 2013-11-24T16:58:28.617 に答える
3

それは明らかです。

byte範囲は 0 ~ 255 です。オーバーフローにつながる 1000 をそこに置こうとしています。unchecked許可する理由

unchecked キーワードは、整数型の算術演算と変換のオーバーフロー チェックを抑制するために使用されます。

于 2013-11-24T16:58:33.393 に答える