Другие языки программирования и технологии

Двоичная система счисления

Декодируйте (представьте в виде обыкновенной дроби) число 11011101, записанное в формате с плавающей точкой (первый бит – знаковый, три следующих представляют порядок числа в двоичном коде с избытком, а остальные – нормализованную мантиссу в обычном двоичном коде).
Ну, давайте попробуем.
1.101.1101
Если брать каноническое описание способа кодирования, которое даётся в курсе информатики, то старший разряд - знак числа s = 1, порядок с избытком е=101(2)=5(10), нормализованная мантисса m=1101.
В классическом случае порядок кодируется с избытком 2^(n-1), где n – кол-во разрядов для хранения порядка. Нормализованная мантисса представляется в промежутке 0 <= m < 1, т. е. запятая находится слева от самого старшего её разряда, а целая часть, равная 0, вообще не хранится в двоичном представлении.
Тогда закодированное число получается так:
(-1)^s * 2^(e - 2^(3-1)) * 0,m = (-1)^s * 2^(e - 4) * 0,m
Для заданного числа получится:
(-1)^1 * 2^(5-4) * 0,1101 = - 0,1101 * 2 = - 1,101
Для представления в виде обыкновенной дроби нужно сдвинуть запятую до упора вправо, посчитать на какое кол-во разрядов она передвинулась и умножить число на 2 в степени - (это кол-во) :
- 1,101 = - 1101 * 2^(-3) = - 1101 / 1000
После перевода в десятичную систему получится -13/8.

Но.. .
На практике чаще используется другой способ кодирования по стандарту IEEE 754.
Порядок представляется с избытком 2^(n-1)-1, т. е. для 3-х разрядов = 3
Нормализованная мантисса представляется в промежутке 1 <= m < 2, причём целая часть, всегда (исключая представление нуля) равная 1 в двоичном представлении не хранится. И число декодируется по формуле:
(-1)^s * 2^(e - 3) * 1,m
Для заданного числа получится совсем другой результат:
(-1)^1 * 2^(5-3) * 1,1101 = - 1,1101 * 4 = - 111,01
Обыкновенная дробь получится: -29/4

Так что, Иван Екимов прав: результат зависит от способа кодирования.
Возможны ещё два варианта с различными комбинациями представления нормализованной мантиссы и смещения порядка: -13/4 и -29/8.
Валентин Смоляков
Валентин Смоляков
51 590
Лучший ответ
Так их же много, форматов то. Чтобы декодировать, нужно знать как оно кодировалось. А тут возможны варианты.
Вася Жуков
Вася Жуков
89 175