Двоичные дроби |
Двоичные дроби |
ShpateL |
12.03.2007 23:13
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: 0 |
Извиняюсь, если подобная тема поднималась, но я почти нефига не нашел(((
Проблема вот в чем: надо написать курсовик по системам исчисления (конкретней - по двоичной). С простым переводом и отрицательными числами все понятно. Но вот с дробями... В принципе, и с этим вроде как все ясно, но как двоичные числа видит процессор (я еще думал в раздел асм написать)? Каким образом производится деление? Какие бывают дроби? ЗЫ опыт программирования в асме не большой, но простенькую мат. прогу напишу |
Lapp |
13.03.2007 2:11
Сообщение
#2
|
|||
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
как двоичные числа видит процессор? Каким образом производится деление? Какие бывают дроби? А разве процессор види какие-то другие числа, кроме двоичных?.. Дроби бывают только одни: двоичные. Я хочу сказать, что в обычном мире есть двухэтажные дроби (с дробной чертой) и десятичные. В машинном представлении двухэтажных нет, а есть только "N-ичные". А поскольку для машин (пока) всегда N=2, то двоичные. Если тебе нужно обрабатывать двоичные числа, это не обязательно делать на ассемблере - все можно сделать на том же Паскале.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
ShpateL |
13.03.2007 15:35
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: 0 |
Хм, сорри, немного не правильно задал вопрос: как проц видит двоичные дроби? К примеру я разделю 0101 на 0010. Какой получится ответ? И как его увидит проц? Ведь он же не будет ставить запятую после целой части? А как тогда он определяет целое число или дробное?
Зы: виндовский калькулятор при делении, допустим, 111 на 10 упорно выдает 11, без всякой дробной части... |
Lapp |
14.03.2007 5:00
Сообщение
#4
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Хм, сорри, немного не правильно задал вопрос: как проц видит двоичные дроби? К примеру я разделю 0101 на 0010. Какой получится ответ? И как его увидит проц? Ведь он же не будет ставить запятую после целой части? А как тогда он определяет целое число или дробное? Зы: виндовский калькулятор при делении, допустим, 111 на 10 упорно выдает 11, без всякой дробной части... В двоичной системе Все зависит от выбранного способа представления чисел в компьютере. Если выбрано целое представление, то ни о каких дробях не может быть и речи; если производится деление - то только нацело, остаток отбрасывается. При этом число записывается насквозь в несколько байтов (сколько выбрано - один, два, четыре, восемь...). Отрицательные числа записываются в т.н. дополнительном коде. Другое представление - т.н. "с плавающей точкой" (иначе говоря - действительное число). Оно также использует несколько байт. Все пространство делится на две части: одна под запись мантиссы (обычно, бОльшая), другая под запись порядка (на сколько разрядов сдвинуть точку в мантиссе. Например, тебе надо представить 129 как действительное. Мантисса равна .129 , а порядок 3, то есть все число есть 0.129*10^6 или .129e6. Это в дестичной записи. В двоичной будет так: мантисса: .10000001 (реально записываются, конечно, только цифры, то есть биты - точка подразумевается. Мантисса должна быть обязательно меньше 1 и больше либо равна 1/2, то есть 0.1 в двоичной записи); порядок (равен в данном случае числу знаков в мантиссе) : 8 . Дальше, как ты знаешь, при делении мантиссы нужно поделить, а порядки вычесть. После этого нормализовать число, т.е. если мантисса вышла за указанные выше диапазоны - сдвинуть ее внутрь их, соответствующим образом скорректировав порядок числа. Таким образом, все зависит от того какую операцию ты производишь: над целыми числами или над действительными. Если над целыми, то получишь целый результат, с отброшенным остатком. Если тебе нужно поделить целые числа как действительные, то их нужно сначала привести к виду с плавающей точкой, а потом делить (смотри, например, как работают правила преобразования типов в Паскале). Виндовый калькулятор вообще не имеет действительных чисел в двоичном представлении, все двоичные числа (то есть те, которые в его боксе записаны как двоичные) он понимает как целые. Отсюда и результат.. Ты можешь, если хочешь, набрать число в двоичном виде, запомнить его в единственную ячейку памяти этого калькулятора, затем нажать знак деления, затем ввести делитель в двоичном коде, а потом перейти в десятичные числа и выполнить деление - все будет поделено с дробями, так как ты явно выполнил преобразование типов . -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
ShpateL |
14.03.2007 15:17
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 19 Пол: Мужской Репутация: 0 |
Спасибо за ответ, вроде разобрался
Есть правда еще некоторые непонятные вещи, но, думаю, разберусь. |
Текстовая версия | 29.05.2024 9:06 |