IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Двоичные дроби
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Извиняюсь, если подобная тема поднималась, но я почти нефига не нашел(((
Проблема вот в чем: надо написать курсовик по системам исчисления (конкретней - по двоичной). С простым переводом и отрицательными числами все понятно. Но вот с дробями... В принципе, и с этим вроде как все ясно, но как двоичные числа видит процессор (я еще думал в раздел асм написать)? Каким образом производится деление? Какие бывают дроби?

ЗЫ опыт программирования в асме не большой, но простенькую мат. прогу напишу
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ShpateL @ 12.03.2007 23:13) *

как двоичные числа видит процессор? Каким образом производится деление? Какие бывают дроби?

А разве процессор види какие-то другие числа, кроме двоичных?.. blink.gif
Дроби бывают только одни: двоичные. Я хочу сказать, что в обычном мире есть двухэтажные дроби (с дробной чертой) и десятичные. В машинном представлении двухэтажных нет, а есть только "N-ичные". А поскольку для машин (пока) всегда N=2, то двоичные.

Если тебе нужно обрабатывать двоичные числа, это не обязательно делать на ассемблере - все можно сделать на том же Паскале.
М
Наверное, теме больше подобает быть в алгоритмах, куда я ее и переношу..



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Хм, сорри, немного не правильно задал вопрос: как проц видит двоичные дроби? К примеру я разделю 0101 на 0010. Какой получится ответ? И как его увидит проц? Ведь он же не будет ставить запятую после целой части? А как тогда он определяет целое число или дробное?

Зы: виндовский калькулятор при делении, допустим, 111 на 10 упорно выдает 11, без всякой дробной части... nea.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(ShpateL @ 13.03.2007 15:35) *

Хм, сорри, немного не правильно задал вопрос: как проц видит двоичные дроби? К примеру я разделю 0101 на 0010. Какой получится ответ? И как его увидит проц? Ведь он же не будет ставить запятую после целой части? А как тогда он определяет целое число или дробное?

Зы: виндовский калькулятор при делении, допустим, 111 на 10 упорно выдает 11, без всякой дробной части... nea.gif

В двоичной системе

Все зависит от выбранного способа представления чисел в компьютере.
Если выбрано целое представление, то ни о каких дробях не может быть и речи; если производится деление - то только нацело, остаток отбрасывается. При этом число записывается насквозь в несколько байтов (сколько выбрано - один, два, четыре, восемь...). Отрицательные числа записываются в т.н. дополнительном коде.

Другое представление - т.н. "с плавающей точкой" (иначе говоря - действительное число). Оно также использует несколько байт. Все пространство делится на две части: одна под запись мантиссы (обычно, бОльшая), другая под запись порядка (на сколько разрядов сдвинуть точку в мантиссе. Например, тебе надо представить 129 как действительное. Мантисса равна .129 , а порядок 3, то есть все число есть 0.129*10^6 или .129e6. Это в дестичной записи. В двоичной будет так:
мантисса: .10000001 (реально записываются, конечно, только цифры, то есть биты - точка подразумевается. Мантисса должна быть обязательно меньше 1 и больше либо равна 1/2, то есть 0.1 в двоичной записи);
порядок (равен в данном случае числу знаков в мантиссе) : 8 .

Дальше, как ты знаешь, при делении мантиссы нужно поделить, а порядки вычесть. После этого нормализовать число, т.е. если мантисса вышла за указанные выше диапазоны - сдвинуть ее внутрь их, соответствующим образом скорректировав порядок числа.

Таким образом, все зависит от того какую операцию ты производишь: над целыми числами или над действительными. Если над целыми, то получишь целый результат, с отброшенным остатком. Если тебе нужно поделить целые числа как действительные, то их нужно сначала привести к виду с плавающей точкой, а потом делить (смотри, например, как работают правила преобразования типов в Паскале). Виндовый калькулятор вообще не имеет действительных чисел в двоичном представлении, все двоичные числа (то есть те, которые в его боксе записаны как двоичные) он понимает как целые. Отсюда и результат.. smile.gif Ты можешь, если хочешь, набрать число в двоичном виде, запомнить его в единственную ячейку памяти этого калькулятора, затем нажать знак деления, затем ввести делитель в двоичном коде, а потом перейти в десятичные числа и выполнить деление - все будет поделено с дробями, так как ты явно выполнил преобразование типов smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Спасибо за ответ, вроде разобрался yes2.gif
Есть правда еще некоторые непонятные вещи, но, думаю, разберусь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.12.2024 14:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name