![]() |
перевод из десятичной в двоичную отрицательных чисел с дробной частью
В задании нужно перевести из десятичной в двоичную систему исчисления отрицательное число с дробной частью. Проблема в том, что я не понимаю вот это:
как лучше представить число в двоичной СС: 1) отрицательное число пишется так же, как и положительное, но стоит "-" или бит знака? 2) или переводить число в дополненный код? и если переводить, то после инверсии куда прибавлять единицу? к дробной части или целой? 3) кому не сложно, переведите для примера число -125,635, желательно с объяснением. |
meisme, Есть несколько способов представления дробных двоичных чисел. То же самое мы делаем с десятичными.
1. Фиксированная точка - мы храним в памяти целые числа в виде x = f*a, где f - наше число, a - точность, с которой мы сохраняем дробную часть. Чтобы получить дробное число f, берём из памяти целое x, делим на a. Код:
допустим a = 1000 Хитрый ход: если взять `a' кратно 2^8 = 256, то десятичная точка всегда будет попадать на границу байта. В памяти мы будем видеть целую часть в неизменном виде (чтобы понять надо поиграться самому). Код:
XXXX = 123.567 * (2^16) = 123.567 * 65536 = 8098086 Храним в памяти целое число `x' и каким-то образом закодированное `a'. Например первые 11 бит - степень двойки для `a', остальное = число `x'. Подробнее можно прочитать здесь http://ru.wikipedia.org/wiki/%D0%A7%...81%D1%82%D0%B8 (там же есть примеры) |
meisme, и я рекомендую вот это почитать:
IEEE 754 - стандарт двоичной арифметики с плавающей точкой Представление чисел с плавающей точкой Генри С. Уоррен, Алгоритмические трюки для программистов |
Цитата:
Другой вопрос - что делать с дробными числами, для которых недоступны эти самые битовые операции? Можно объединить их в памяти с целочисленными форматами, подходящими по размеру: Код:
union { P.S.: Ну и проверка размеров типов данных, объединенных в примере на ideone (ибо они зависят от компилятора/платформы) - здесь (эх, 43 days ago, а вроде недавно задавали...) |
Время: 07:01. |
Время: 07:01.
© OSzone.net 2001-