64-битное шестнадцатеричное преобразование в десятичное - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть 16-битное шестнадцатеричное значение:

4164ACFCE33404EA

После преобразования число:

10840039.1001

Я попробовал как 64-разрядные, так и двоичные IEEE с одинарной и двойной точностью, а также различные 16-битные преобразования с двумя комплиментами, но безуспешно.Есть идеи?

1 Ответ

0 голосов
/ 28 сентября 2018

Шестнадцатеричное значение в вашем вопросе показывает биты, используемые для представления числа с плавающей запятой в базовом 64-битном двоичном формате IEEE-754.

Первый бит, 0, является знаком.0 означает положительное значение.

Следующие 11 битов, 416 16 , кодируют показатель степени.416 16 - это 1046 10 .Код смещен на 1023, что означает, что фактическая мощность 2, которую он представляет, равна 2 1046-1023 = 2 23 .

Остальные 52 бита кодируют значение и (дробь) часть числа.Эти биты являются 4ACFCE33404EA 16 .Чтобы получить действительное значение и из этого кода, мы пишем их как «1.», а затем код: 1.4ACFCE33404EA 16 .В десятичном формате это 1,292233359825611049842564170830883085727691650390625 10 .

Когда мы умножаем значимое на 2 23 , результат равен 10840039.1000999994575977325439453125.Это значение, представленное битами 4164ACFCE33404EA 16 .

Примечания

Использование «1.» со значениеми для нормальных чисел, где закодированный показатель степенине 0 или его максимальное значение.Если код экспоненты равен нулю, число либо ноль, либо субнормальное, и вместо него используется «0.».Если код экспоненты является его максимальным значением (2047 для 64-битного формата), объект с плавающей запятой представляет либо бесконечность (если все значащие биты равны нулю), либо NaN.

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

...