Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

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

Пользователь


Сообщения: 89
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: meisme
Дата: 24-03-2014
В задании нужно перевести из десятичной в двоичную систему исчисления отрицательное число с дробной частью. Проблема в том, что я не понимаю вот это:
как лучше представить число в двоичной СС:
1) отрицательное число пишется так же, как и положительное, но стоит "-" или бит знака?
2) или переводить число в дополненный код? и если переводить, то после инверсии куда прибавлять единицу? к дробной части или целой?
3) кому не сложно, переведите для примера число -125,635, желательно с объяснением.

Отправлено: 19:18, 24-03-2014

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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 (там же есть примеры)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:59, 22-04-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Tau_0

Ветеран


Сообщения: 6211
Благодарности: 1393

Профиль | Отправить PM | Цитировать


meisme, и я рекомендую вот это почитать:
IEEE 754 - стандарт двоичной арифметики
с плавающей точкой


Представление чисел с плавающей точкой

Генри С. Уоррен, Алгоритмические трюки для программистов
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:22, 22-04-2014 | #3


Аватара для Habetdin


Автор проектов


Сообщения: 3652
Благодарности: 1498

Профиль | Сайт | Отправить PM | Цитировать


Цитата meisme:
как лучше представить число в двоичной СС »
Заставить ПК вывести бинарный вид нашего числа с помощью битовых операций
Другой вопрос - что делать с дробными числами, для которых недоступны эти самые битовые операции? Можно объединить их в памяти с целочисленными форматами, подходящими по размеру:
Код: Выделить весь код
union {
    float flt;
    long lng;
} x;
x.flt = 15.675;
// вывести в двоичном виде, используя x.lng
А дальше всё зависит от вашей реализации перевода в двоичный вид, пример - на ideone.
P.S.: Ну и проверка размеров типов данных, объединенных в примере на ideone
(ибо они зависят от компилятора/платформы) - здесь (эх, 43 days ago, а вроде недавно задавали...)

-------
Рекомендую: $25 на тест виртуального сервера (VPS) за регистрацию по ссылке


Последний раз редактировалось Habetdin, 24-04-2014 в 02:02. Причина: P.S.


Отправлено: 20:07, 23-04-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - перевод из десятичной в двоичную отрицательных чисел с дробной частью

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перейти в папку из чисел WoW Скриптовые языки администрирования Windows 5 24-06-2012 00:18
C/C++ - [решено] Перевод десятичных чисел в двоичные Artesmann Программирование и базы данных 5 30-05-2011 19:41
Delphi - Перевод из десятичной системы в факториальную. Bars66 Программирование и базы данных 0 09-10-2010 10:03
Нужен комп для работы в отрицательных температурах osp2008 Выбор отдельных компонентов компьютера и конфигурации в целом 8 12-08-2010 12:57
VBA - Перевод чисел в текст прописью Goshar Программирование и базы данных 2 22-12-2007 16:00




 
Переход