これはフォローアップの質問です。したがって、Javaストアの整数は2つの補数であり、次のことができます。
int ALPHA_MASK = 0xff000000;
C#では、これを.の代わりにuint
解釈するため、符号なし整数、を使用する必要があります。4278190080
-16777216
私の質問ですが、c#の16進表記で負の値を宣言するにはどうすればよいですか?また、整数は内部でどのように正確に表されますか?ここでのJavaとの違いは何ですか?
これはフォローアップの質問です。したがって、Javaストアの整数は2つの補数であり、次のことができます。
int ALPHA_MASK = 0xff000000;
C#では、これを.の代わりにuint
解釈するため、符号なし整数、を使用する必要があります。4278190080
-16777216
私の質問ですが、c#の16進表記で負の値を宣言するにはどうすればよいですか?また、整数は内部でどのように正確に表されますか?ここでのJavaとの違いは何ですか?
C#(むしろ、.NET)も2の補数を使用しますが、符号付き型と符号なし型の両方をサポートします(Javaはサポートしていません)。ビットマスクは、より自然に符号なしのものです-1つのビットが他のすべてのビットと異なる必要があるのはなぜですか?
この特定のケースでは、チェックされていないキャストを使用しても安全です。
int ALPHA_MASK = unchecked((int)0xFF000000);
この数値を符号付きの値として「直接」表すには、次のように記述します。
int ALPHA_MASK = -0x1000000; // == -16777216
16進数は、10進数と何ら変わりはありません(またはすべきではありません)。負の数を表すには、負の符号を記述し、その後に絶対値を表す数字を書き込む必要があります。
さて、あなたはチェックされていないブロックとキャストを使うことができます:
unchecked
{
int ALPHA_MASK = (int)0xff000000;
}
また
int ALPHA_MASK = unchecked((int)0xff000000);
それほど便利ではありませんが...おそらくリテラル整数を使用するだけですか?
そして、けがに侮辱を加えるだけで、これも機能します。
-0x7F000000