Диапазон значений шестнадцатеричных чисел
-
Шестнадцатеричные числа в диапазоне 0 .. 7FFF FFFF являются положительными
INTEGER
числа со значениями 0 .. 2147483647. Для того чтобы интерпретировать константу какBIGINT
число, необходимо дописать необходимо количества нулей слева. Это изменит тип, но не значение. -
Числа в диапазоне 8000 0000 .. FFFF FFFF требуют особого внимания:
-
При записи восемью шестнадцатеричный числами, такие как
0x9E44F9A8
, интерпретируется как 32-битное целое. Поскольку крайний левый (знаковый) бит установлен, то такие числа будут находиться в отрицательном диапазоне -2147483648 .. -1. -
Числа предварённые одним или несколькими нулями, такие как
0x09E44F9A8
, будут интерпретированы как 64-разрядный BIGINT в диапазоне значений 0000 0000 8000 0000 .. 0000 0000 FFFF FFFF. В этом случае знаковый бит не установлен, поэтому они отображаются в положительном диапазоне 2147483648 .. 4294967295 десятичных чисел.
Таким образом, только в этом диапазоне числа, предварённые совершенно незначимым нулём, имеют кардинально разные значения.Это необходимо знать.
-
-
Шестнадцатеричные числа в диапазоне 1 0000 0000 .. 7FFF FFFF FFFF FFFF являются положительными
BIGINT
числами. -
Шестнадцатеричные числа в диапазоне 8000 0000 0000 0000 .. FFFF FFFF FFFF FFFF являются отрицательными
BIGINT
числами. -
Числа с типом
SMALLINT
не могут быть записаны в шестнадцатеричном виде, строго говоря, так как даже0x1
оценивается какINTEGER
. Тем не менее, если вы записываете положительное целое число в пределах 16-разрядного диапазона от 0x0000 (десятичный ноль) до0x7FFF
(десятичное 32767), то оно будет преобразовано вSMALLINT
прозрачно.Вы можете записать отрицательное
SMALLINT
число в шестнадцатеричном виде используя 4-байтное шестнадцатеричное число в диапазоне от0xFFFF8000
(десятичное -32768) до0xFFFFFFFF
(десятичное -1).