web-dev-qa-db-ja.com

16進数は負になりますか?

16進数は負になりますか?はいの場合、どのように?
バイナリの場合、符号付きおよび符号なしになります。
16進数でそれらをどのように表現しますか?これから着手しようとしているヘクスルーチンにこれが必要です。

9
phoenix

はい。たとえば、符号付き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進表現に直接関連しています。

24
Andrew Cooper

数値の上位ビットは、それが負であるかどうかを決定します。たとえば、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
15
MeBigFatGuy

はい、できます。それをどのように解釈するか(符号付きと符号なし)に関しては、バイナリと同じです。

6
Bala R

2進数の符号付きと符号なしの形式を取り、他の2進数と同じように16進数で表します。

5
Vetsin

一方では、なぜそうではありません-それは10進数のような単なる位置記数法です。

一方、通常は16進表記を使用して、基になるビットパターンを推測します。これは、数値が符号なしとして解釈される場合、はるかに簡単です。

つまり、答えは-可能で、数学的に正しく、内部的に一貫性がありますが、16進表記の最も一般的な目的を打ち破ります。

3
Seva Alekseyev

Javaでは、これらはIntegerデータ型の境界です。

Integer.MIN_VALUE = 0x80000000; 
Integer.MAX_VALUE = 0x7fffffff;
1
gordonssl