11

これはフォローアップの質問です。したがって、Javaストアの整数は2つの補数であり、次のことができます。

int ALPHA_MASK = 0xff000000;

C#では、これを.の代わりにuint解釈するため、符号なし整数、を使用する必要があります。4278190080-16777216

私の質問ですが、c#の16進表記で負の値を宣言するにはどうすればよいですか?また、整数は内部でどのように正確に表されますか?ここでのJavaとの違いは何ですか?

4

3 に答える 3

25

C#(むしろ、.NET)も2の補数を使用しますが、符号付き型と符号なし型の両方をサポートします(Javaはサポートしていません)。ビットマスクは、より自然に符号なしのものです-1つのビットが他のすべてのビットと異なる必要があるのはなぜですか?

この特定のケースでは、チェックされていないキャストを使用しても安全です。

int ALPHA_MASK = unchecked((int)0xFF000000);

この数値を符号付きの値として「直接」表すには、次のように記述します。

int ALPHA_MASK = -0x1000000; // == -16777216

16進数は、10進数と何ら変わりはありません(またはすべきではありません)。負の数を表すには、負の符号を記述し、その後に絶対値を表す数字を書き込む必要があります。

于 2008-11-26T07:47:36.973 に答える
7

さて、あなたはチェックされていないブロックとキャストを使うことができます:

unchecked
{
    int ALPHA_MASK = (int)0xff000000;
}

また

int ALPHA_MASK = unchecked((int)0xff000000);

それほど便利ではありませんが...おそらくリテラル整数を使用するだけですか?

于 2008-11-26T07:52:15.137 に答える
0

そして、けがに侮辱を加えるだけで、これも機能します。

-0x7F000000
于 2010-03-19T21:04:59.063 に答える