16進数は負になりますか?はいの場合、どのように?
バイナリの場合、符号付きおよび符号なしになります。
16進数でそれらをどのように表現しますか?これから着手しようとしているヘクスルーチンにこれが必要です。
はい。たとえば、符号付き32ビットのバイナリと16進数で次の表現があります。
Decimal: 1
Binary: 00000000 00000000 00000000 00000001
Hex: 00 00 00 01
Decimal: -1
Binary: 11111111 11111111 11111111 11111111
Hex: FF FF FF FF
Decimal: -2
Binary: 11111111 11111111 11111111 11111110
Hex: FF FF FF FE
ご覧のとおり、負の数の16進表現は、2進表現に直接関連しています。
数値の上位ビットは、それが負であるかどうかを決定します。たとえば、intは32ビット長であるため、ビット31が1の場合、負になります。ここで、その値を16進数または10進数でどのように表示するかは重要ではありません。したがって、次のような16進値
0x80000000
0x91345232
0xA3432032
0xBFF32042
0xC33252DD
0xE772341F
0xFFFFFFFF
トップビットが1に設定されているため、すべて負です。
|
v
0x8 -> 1000
0x9 -> 1001
0xA -> 1010
0xB -> 1011
0xC -> 1100
0xD -> 1101
0xE -> 1110
0xF -> 1111
はい、できます。それをどのように解釈するか(符号付きと符号なし)に関しては、バイナリと同じです。
2進数の符号付きと符号なしの形式を取り、他の2進数と同じように16進数で表します。
一方では、なぜそうではありません-それは10進数のような単なる位置記数法です。
一方、通常は16進表記を使用して、基になるビットパターンを推測します。これは、数値が符号なしとして解釈される場合、はるかに簡単です。
つまり、答えは-可能で、数学的に正しく、内部的に一貫性がありますが、16進表記の最も一般的な目的を打ち破ります。
Javaでは、これらはInteger
データ型の境界です。
Integer.MIN_VALUE = 0x80000000;
Integer.MAX_VALUE = 0x7fffffff;