void sum1([color=gray]/*ВХОД:*/[/color] int a, int b, int p, [color=gray]/*ВЫХОД:*/[/color] int &sum, int &p1)
{
// a,b -- слагаемые, p -- i-й перенос, p1 -- i+1-й перенос, sum -- сумма
// [color=blue]TODO:[/color] сделать вычисления по указанным выше формулам
}
Одноразрядный сумматор
Написать и протестировать функцию, моделирующую работу одноразрядного сумматора. Слагаемые имеют длину n разрядов и записаны в дополнительном коде ( формат с фиксированной запятой).
Принята следующая нумерация разрядов n-1.n-2,.....,1,0
Формулы получения i-го разряда суммы и переноса в i+1-й разряд имеют вид:
Si=Ai^Bi^Pi
P[SIZE="1"]i+1[/SIZE]=Ai*Bi+Ai*Pi+Bi*Pi 0,....,n-1; P[SIZE="1"]0[/SIZE]=0
Наряду с суммой должны быть сформированы одноразрядные признаки результатов:
Знак sq=s[SIZE="1"]n-1[/SIZE]
Перенос с=Pn
Переполнение v=Pn*Pn-1+Pn*Pn-1
Выше приняты следующие обозначения операций:
*-логическое умножение
+-логическое сложение
^-сложение по mod2(исключающее или)
_отрицание не
Вобщем запутался я с этим задание, помогите пожалуйсто советом как всё это сделать=)
Зарание спасибо)
Код:
Дальше заводишь n-массивы для слагаемых (А,В), суммы (S) и переносов (P) и проходишь по их элементам по порядку вызывая ф-цию sum1:
Код:
for (i = 0; i < n; i++) sum1(A, B, P, S, P[i+1]);
Извиняюсь конечно, но что-то я всё равно не догоняю:(
а я не догоняю что именно вам не понятно, может поможете мне?
Сколько разрядов имеет результат сложения? - один что-ли?
Цитата: Andreika
Стоп, я может чего-то не понял... Как это "одноразрядный" сумматор?
Сколько разрядов имеет результат сложения? - один что-ли?
Сколько разрядов имеет результат сложения? - один что-ли?
Один. И бит переноса.