型の変数がありsbyte
、コンテンツを にコピーしたいと考えていbyte
ます。変換は値の変換ではなく、ビットごとのコピーになります。
例えば、
ビット単位の mySbyte が '10101100' の場合、変換後、対応するバイト変数にもビット '10101100' が含まれます。
事業内容を明確にさせてくださいunchecked
。MSDN ページには、オーバーフロー チェックを防ぐために使用されると記載されています。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 です。
unchecked
{
sbyte s = (sbyte)250; //-6 (11111010)
byte b = (byte)s; //again 250 (11111010)
}
unchecked
{
sbyte s;
s= (sbyte)"your value";
byte b=(byte)s;
}
についての詳細unchecked
はこちら
このような:
sbyte sb = 0xFF;
byte b = unchecked((byte)sb);