12

型の変数がありsbyte、コンテンツを にコピーしたいと考えていbyteます。変換は値の変換ではなく、ビットごとのコピーになります。

例えば、

ビット単位の mySbyte が '10101100' の場合、変換後、対応するバイト変数にもビット '10101100' が含まれます。

4

4 に答える 4

21

事業内容を明確にさせてくださいuncheckedMSDN ページには、オーバーフロー チェックを防ぐために使用されると記載されています。uncheckedそうしないと、チェックされたコンテキスト内でコンパイル エラーが発生するか、例外がスローされます。

...チェックされたコンテキスト内のIF 。

コンテキストは明示的にチェックされます:

checked { ... } 

または暗黙的に*、コンパイル時の定数を扱う場合:

byte b = (byte)-6; //compile error
byte b2 = (byte)(200 + 200); //compile error

int i = int.MaxValue + 10; //compiler error

しかし、ランタイム変数を扱う場合、コンテキストはuncheckedデフォルトで **:

sbyte sb = -6;
byte b = (byte)sb; //no problem, sb is a variable


int i = int.MaxValue;
int j = i + 10;    //no problem, i is a variable

元の質問を要約して答えるには:

定数byte<->sbyteの変換が必要ですか? 使用およびキャスト:unchecked

byte b = unchecked( (byte) -6 );

変数byte<->sbyteの変換が必要ですか? キャストするだけです:

sbyte sb = -6;
byte b = (byte) sb;

* デフォルトでチェックされたコンテキストを取得する 3 番目の方法があります: コンパイラの設定を微調整することです。例: Visual Studio -> プロジェクト プロパティ -> ビルド -> 詳細設定... -> [X] 算術オーバーフロー/アンダーフローのチェック

** C#では、ランタイム コンテキストはデフォルトでオフになっています。たとえば、VB.NET では、デフォルトのランタイム コンテキストは CHECKED です。

于 2013-03-15T13:33:39.827 に答える
5
unchecked
{
    sbyte s = (sbyte)250; //-6 (11111010) 
    byte b = (byte)s; //again 250 (11111010) 
}
于 2012-06-25T12:10:21.143 に答える
5
unchecked
{
    sbyte s;
    s= (sbyte)"your value";
    byte b=(byte)s;
}

についての詳細uncheckedこちら

于 2012-06-25T12:26:38.273 に答える
4

このような:

sbyte sb = 0xFF;
byte b = unchecked((byte)sb);
于 2012-06-25T12:09:53.843 に答える