Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Схемотехника] Операции с двоичными числами


Автор: Loncaster 6.2.2007, 20:06
Вообщем проболел почти все начало схемотехники...а точнее тему где обсуждалось деление/умножение чисел с плавающей точкой и с фиксированной. Так вот прошу помочь мне решить данную лабу, конечно подозреваю что именно решать врятли кто-то захочет, но тогда хотя бы раскажите алгоритмы этих умножений/делений))

Вообщем
Число А = ((17+25)/64)десят. = 0,10101 двоичная , Порядок = 6
Число Б = ((60-17)/64)десят. = 0,101011 двоичная, Порядок = 1

Задание 1
Заданные десятичные числа перевести в двоичную систему(это я уже сделал) и совершить умножение числе с фиксированной точкой. Результаты проверить письменно.
Задание 2
Совершить деление вышезаданных чисел с фиксированной точкой. Проверить результаты письменно.
Задание 3
Навести пример действий с порядками и посчитать результаты операций умножения и деления с указанными порядками.

Вообщем буду благодарен за любую помощь =)



Автор: Faiton 6.2.2007, 22:53
юзай асм....там всё легко и просто smile

Автор: Loncaster 7.2.2007, 15:59
Да Мне это на бумаге решить нужно, а не напрограммировать =))

Автор: Ripper 10.2.2007, 14:31
Так. Смотрим 1 задание) Как я понял у тебя есть два числа
A=0,10101
B=0,101011
Чтобы их перемножить (умножение с фиксированной запятой(или точкой), где все числа меньше 1) нужно выполнить следующие действия
1)Представить числа в прямых кодах:
[X]пк = 0.10101
[Y]пк = 0.101011
(до точки - знак, 0 - плюс, 1 - минус. в данном случае все положительно)
2)Перемножить собственно. Есть 2 способа. С младших и старших разрядов. С младших по мне так легче но я забыл формулу. А со старших - понятнее. Выводить откуда это не хочу (если надо скажи), а вот в чем заключается метод. Сначала нумеруешь цифорки числа Y начиная с цифровой части (т.е. та что после точки). Хотя и не обязательно просто по разному это дело рисуют кто через таблицу кто через ф-лу. Кароче. Рисуешь табличку из 3х столбцов. В первом столбце каждая строка - цифра числа Y начиная слева. Второй столбец каждая строка - сдвинутое число икс на один 0. А третий столбец, в нем строки - результат умножения первого столбца на второй. Кароче чтобы было понятнее вот:

__________________________________
1 (y1)|0.010101 (x * 2^-1)|0.010101 
0 (y2)|0.0010101 (x*2^-2)|0
1 (y3)|0.00010101             |0.00010101
0 (y4)|0.000010101           |0
1 (y5)|0.0000010101         |0.00000101
1 (y6)|0.00000010101       |0.00000010101

Результатом умножения будет субба всех элементов третьего столбца.
У меня получилось 0.01110000111
Теперь проверяем на калькуляторе, но он у меня не считает числа меньше 0 т.е. дробные. Так что я целыми посчитаю
A = 10101 =  21
B = 101011 = 43
21*43=903
903 -> 1110000111
Т.е. ответ сходится (там нолик лишний не играет роли)

Я надеюсь я верно все посчитал и объяснил т.к. я сам плавал в этой теме да и щас не лучше

Делить не умею. Разве что могу посоветовать www.intuit.ru и там гдееее то должны быть лекции по Организации ЭВМ И арифметическим основам

Добавлено @ 14:35 
Умножение с порядками. Значит, что там... хм
Число с плавающей запятой представляется в виде
X = порядок * мантисса
Напримере десятичной:
21*10^2 (или 210) нужно умножить на 32 *10^3 (или 3200)
Что происходит: 21*10^2*32*10^3 = 21*32*10^5
Т.е. порядки складываются, а мантиссы перемножаются
Ты перемножаешь мантиссы как я написал выше (либо способом с младших разрядов - роли не играет)
А потом складываешь порядки и сичло записывается в виде, например
X = 0,1010  0,1011101 
т.е. порядок и мантисса отдельно. 
Вроде так
Ну при делении порядки вычитаются и мантиссы делятся. Так же могут быть исключительные ситуации с машинной бесконечностью и нулем, о которых я не знаю. Сложение и вычитание чисел с плавающей запятой чуть по сложнее, там нужно приводить к одному порядку

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)