Отрицательное плавающее число в двоичное

Итак, в упражнении говорится: «Рассмотрите двоичную кодировку действительных чисел на 16 битах. Заполните пустые точки двоичной кодировки числа -0,625, зная, что «1110» обозначает показатель степени и минус один «-1».

                _ 1110_ _ _ _ _ _ _ _ _ _ _                              "

Я не могу найти ответ, и я знаю, что это не сложное упражнение (по крайней мере, оно не похоже на сложное).


person Chrome Obie    schedule 29.08.2016    source источник


Ответы (3)


Давайте пока проигнорируем знак и разложим значение 0,625 на (отрицательные) степени числа 2:

0.625(dec) = 5 * 0.125 = 5 * 1/8 = 0.101(bin) * 2^0

Это должно быть нормализовано (значение сдвинуто влево до тех пор, пока перед десятичной точкой не появится единица, и соответствующим образом скорректирована экспонента), поэтому оно становится

0.625(dec) = 1.01(bin) * 2^-1 (or 1.25 * 0.5)

Со скрытым битом

Предполагая, что у вас есть сценарий со скрытым битом (это означает, что для нормализованных значений верхний бит всегда равен 1, поэтому он не сохраняется), он становится .01 заполненным справа нулевыми битами, поэтому вы получаете

sign = 1                        -- 1 bit
exponent = 1110                 -- 4 bits
significand = 0100 0000 000     -- 11 bits

Итак, биты:

1 1110 01000000000

Сгруппированы по-разному:

1111 0010 0000 0000(bin) or F200(hex)

Без скрытого бита (т.е. верхний бит сохранен)

Если нет скрытого битового сценария, он становится

1 1110 10100000000

or

1111 0101 0000 0000(bin) = F500(hex)
person Rudy Velthuis    schedule 29.08.2016

Прежде всего вам нужно понять, что каждое число «z» может быть представлено

z = m * b^e

m = мантисса, b = смещение, e = показатель степени

Таким образом, -0,625 можно представить как:

-0.625 * 10^ 0
-6,25 * 10^-1
-62,5 * 10^-2
-0,0625 * 10^ 1

С преобразованием IEEE мы стремимся к нормализованному числу с плавающей запятой, что означает, что перед запятой есть только одно предшествующее число (-6,25 * 10^-1)

В двоичном формате единственное число перед запятой всегда будет 1, поэтому это число не будет сохранено.

Вы конвертируете в 16-битное число с плавающей запятой, поэтому у вас есть:

1 бит знак 5 бит экспонента 10 бит мантисса == 16 бит

Поскольку показатель степени может быть отрицательным и положительным (как вы видели выше, это зависит только от смещения запятой), они придумали так называемое смещение. Для 5 бит значение смещения равно 01 111 == 15(dez), где 14 соответствует ^-1, а 16 соответствует ^1...

Хорошо, достаточно светской беседы, давайте конвертируем ваш номер в качестве примера, чтобы показать процесс конвертации:

  1. Преобразуйте преддесятичную позицию в двоичную, как всегда
  2. Умножьте десятичный разряд на 2, если результат больше 1, вычтите 1 и запишите 1, если он меньше 0 запишите 0. Продолжайте этот шаг, пока результат не будет == 0 или вы не записали столько чисел, сколько имеет ваша мантисса.
  3. сдвиньте запятую только до одного знака после запятой и подсчитайте сдвиги. если вы сдвинулись влево, добавьте счет к смещению, если вам нужно сместиться вправо, вычтите счет из смещения. Это ваш показатель
  4. Определите свой знак и сложите все части вместе

-0,625
1. 0 в двоичный == 0

2.
0,625 * 2 = 1,25 ==> -1
0,25 * 2 = 0,5 ==> 0
0,5 * 2 = 1 ==> -1
Прервать

3. Таким образом, промежуточный результат равен -0,101
сдвинуть запятую на 1 раз вправо для нормализованного числа с плавающей запятой:
- 1.01
показатель степени = смещение + (-1) == 15 - 1 == 14(дез) == 01110(бин)

4. Соединить части, знак = 1(отрицательный), ( и помните, что мы не сохраняем первую единицу числа)

1 01110 01
поскольку мы прервали вычисление мантиссы, заполните остальные биты 0:
1 01110 01 000 000 00

person Jan Raufelder    schedule 29.08.2016

Стандарт IEEE 754 определяет binary16 как имеющий следующий формат:

Sign bit: 1 bit
Exponent width: 5 bits
Significand precision: 11 bits (10 explicitly stored)

Уравнение = exp(-1, signbit) x exp(2, exponent-15) x (1.significantbits)

Решение выглядит следующим образом:

-0.625 = -1 x 0.5 x 1.25
significant bits = 25 = 11001
exponent = 14 = 01110
signbit = 1
ans = (1)(01110)(0000011001)
person Rishit Sanmukhani    schedule 29.08.2016
comment
Я не уверен, что назначение для OP использует 16-битные числа с плавающей запятой, совместимые с IEEE. Похоже, что его экспонента всего 4 бита. Таким образом, применяются принципы, но реальные биты могут немного отличаться. - person Rudy Velthuis; 29.08.2016