C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

Ответить
Аватара пользователя
meisme

C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

Сообщение meisme »

В задании нужно перевести из десятичной в двоичную систему исчисления отрицательное число с дробной частью. Проблема в том, что я не понимаю вот это:

как лучше представить число в двоичной СС:

1) отрицательное число пишется так же, как и положительное, но стоит "-" или бит знака?

2) или переводить число в дополненный код? и если переводить, то после инверсии куда прибавлять единицу? к дробной части или целой?

3) кому не сложно, переведите для примера число -125,635, желательно с объяснением.
Аватара пользователя
pva

Re: C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

Сообщение pva »

meisme, Есть несколько способов представления дробных двоичных чисел. То же самое мы делаем с десятичными.

1. Фиксированная точка - мы храним в памяти целые числа в виде x = f*a, где f - наше число, a - точность, с которой мы сохраняем дробную часть. Чтобы получить дробное число f, берём из памяти целое x, делим на a.



Код:

Код: Выделить всё

допустим a = 1000
123567 = 123.567 * 1000
    ^ это пишем в память, т.к. в памяти только целые числа

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



Хитрый ход: если взять `a' кратно 2^8 = 256, то десятичная точка всегда будет попадать на границу байта. В памяти мы будем видеть целую часть в неизменном виде (чтобы понять надо поиграться самому).



Код:

Код: Выделить всё

XXXX = 123.567 * (2^16) = 123.567 * 65536 = 8098086
    ^ это пишем в память, т.к. в памяти только целые числа
В память запишется: 00 7B 91 26
Имейте в виду, что 123 - это 7B

2. Плавающая точка.

Храним в памяти целое число `x' и каким-то образом закодированное `a'. Например первые 11 бит - степень двойки для `a', остальное = число `x'. Подробнее можно прочитать здесь
http://ru.wikipedia.org/wiki/%D0%A7%...81%D1%82%D0%B8
(там же есть примеры)
Аватара пользователя
Habetdin

Re: C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

Сообщение Habetdin »

Цитата meisme:



как лучше представить число в двоичной СС
C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью




Заставить ПК вывести бинарный вид нашего числа с помощью битовых операций Изображение

Другой вопрос - что делать с дробными числами, для которых недоступны эти самые битовые операции? Можно объединить их в памяти с целочисленными форматами, подходящими по размеру:



Код:

Код: Выделить всё

union {
    float flt;
    long lng;
} x;
x.flt = 15.675;
// вывести в двоичном виде, используя x.lng

А дальше всё зависит от вашей
реализации перевода в двоичный вид
, пример -
на ideone
.

P.S.: Ну и проверка размеров типов данных, объединенных в примере на ideone

(ибо они зависят от компилятора/платформы) -
здесь
(эх, 43 days ago, а вроде недавно задавали...)
Ответить

Вернуться в «Программирование и базы данных»