Цитата(ShpateL @ 13.03.2007 15:35)
Хм, сорри, немного не правильно задал вопрос: как проц видит двоичные дроби? К примеру я разделю 0101 на 0010. Какой получится ответ? И как его увидит проц? Ведь он же не будет ставить запятую после целой части? А как тогда он определяет целое число или дробное?
Зы: виндовский калькулятор при делении, допустим, 111 на 10 упорно выдает 11, без всякой дробной части...
В двоичной системе
Все зависит от выбранного способа
представления чисел в компьютере.
Если выбрано
целое представление, то ни о каких дробях не может быть и речи; если производится деление - то только нацело, остаток отбрасывается. При этом число записывается насквозь в несколько байтов (сколько выбрано - один, два, четыре, восемь...). Отрицательные числа записываются в т.н. дополнительном коде.
Другое представление - т.н. "с плавающей точкой" (иначе говоря - действительное число). Оно также использует несколько байт. Все пространство делится на две части: одна под запись мантиссы (обычно, бОльшая), другая под запись порядка (на сколько разрядов сдвинуть точку в мантиссе. Например, тебе надо представить 129 как действительное. Мантисса равна .129 , а порядок 3, то есть все число есть 0.129*10^6 или .129e6. Это в дестичной записи. В двоичной будет так:
мантисса: .10000001 (реально записываются, конечно, только цифры, то есть биты - точка подразумевается. Мантисса должна быть обязательно меньше 1 и больше либо равна 1/2, то есть 0.1 в двоичной записи);
порядок (равен в данном случае числу знаков в мантиссе) : 8 .
Дальше, как ты знаешь, при делении мантиссы нужно поделить, а порядки вычесть. После этого нормализовать число, т.е. если мантисса вышла за указанные выше диапазоны - сдвинуть ее внутрь их, соответствующим образом скорректировав порядок числа.
Таким образом, все зависит от того какую операцию ты производишь: над целыми числами или над действительными. Если над целыми, то получишь целый результат, с отброшенным остатком. Если тебе нужно поделить целые числа как действительные, то их нужно сначала привести к виду с плавающей точкой, а потом делить (смотри, например, как работают правила преобразования типов в Паскале). Виндовый калькулятор вообще не имеет действительных чисел в двоичном представлении, все двоичные числа (то есть те, которые в его боксе записаны как двоичные) он понимает как целые. Отсюда и результат..
Ты можешь, если хочешь, набрать число в двоичном виде, запомнить его в единственную ячейку памяти этого калькулятора, затем нажать знак деления, затем ввести делитель в двоичном коде, а потом перейти в десятичные числа и выполнить деление - все будет поделено с дробями, так как ты явно выполнил преобразование типов
.