Являются ли шестнадцатеричные числа отрицательными? - PullRequest
9 голосов
/ 29 апреля 2011

Являются ли шестнадцатеричные числа когда-либо отрицательными? Если да, то как?
Для двоичного файла вы должны иметь со знаком и без знака .
Как можно представить их в Hex? Мне нужно это для шестнадцатеричной рутины, которую я собираюсь предпринять.

Ответы [ 6 ]

23 голосов
/ 29 апреля 2011

Да.Например, у вас будут следующие представления в двоичном двоичном и шестнадцатеричном формате со знаком:

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

Как видите, шестнадцатеричное представление отрицательных чисел напрямую связано с двоичным представлением.

15 голосов
/ 29 апреля 2011

Старший бит числа определяет, является ли он отрицательным. Так, например, int имеет длину 32 бита, поэтому, если бит 31 равен 1, он является отрицательным. Теперь, как вы отображаете это значение, будь то шестнадцатеричное или десятичное, не имеет значения. поэтому шестнадцатеричные значения, такие как

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
6 голосов
/ 29 апреля 2011

Да, они могут быть.Это то же самое, что и двоичный код в том, как вы его интерпретируете (подписано против неподписано).

5 голосов
/ 29 апреля 2011

Вы должны взять двоичные формы со знаком и без знака, а затем представить их в шестнадцатеричном виде, как и любое двоичное число.

3 голосов
/ 30 июля 2013

С одной стороны, почему бы и нет - это просто позиционная числовая система, подобная десятичной.

С другой стороны, они обычно используют шестнадцатеричную нотацию, чтобы вывести базовый битовый шаблон - и это гораздо проще, есличисло интерпретируется как беззнаковое.

Таким образом, ответ таков: это возможно, математически правильно и внутренне непротиворечиво, но побеждает наиболее распространенную цель шестнадцатеричной записи.

1 голос
/ 29 июня 2015

В Java это границы типа данных Integer:

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