Таблица сложения
ai | 0 | 0 | 1 | 1 |
| 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | ||||||||||||||||
bi | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |||||||||||||||||
Pi-1 | 0 | 0 | 0 | 0 | ![]() | ![]() | ![]() | ![]() | 1 | 1 | 1 | 1 | |||||||||||||||||
gi | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | |||||||||||||||||
Pi | 0 | 0 | 0 | ![]() | 1 | 0 | 0 | 0 | 0 | ![]() | ![]() | ![]() |
Примеры: | 3 | ~ | 0 | 0 | 1 | 1 | 1 | +9 | ~ | 1 | 1 | 0 | 0 | 1 | |||||||||||||||||
5 | ~ | 0 | 0 | 1 | 0 | 1 | ?6 | ~ | 0 | 1 | 1 | 1 | 0 | ||||||||||||||||||
8 | ~ | 1 | 1 | 0 | 0 | 0 | +3 | ~ | 0 | 0 | 1 | 1 | 1 |
2. Вычитание. Так как a-b = a+b?2b = a+b+b(?2), причем b(?2) – это число b, сдвинутое на один разряд влево, то алгоритм вычитания может быть сформулирован так. Для того чтобы из a вычесть b, необходимо к a прибавить b и прибавить b, сдвинутое на один разряд влево.
Примеры:
а) | +6 | ~ | 1 | 1 | 0 | 1 | 0 | б) | –5 | ~ | 0 | 1 | 1 | 1 | 1 | в) | –7 | ~ | 0 | 1 | 0 | 0 | 1 | ||||||||||||||||||||||||||||||||
– | – | – | |||||||||||||||||||||||||||||||||||||||||||||||||||||
+3 | ~ | 0 | 0 | 1 | 1 | 1 | +4 | ~ | 0 | 0 | 1 | 0 | 0 | –10 | ~ | 0 | 1 | 0 | 1 | 0 | |||||||||||||||||||||||||||||||||||
1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | ||||||||||||||||||||||||||||||||||||||||
0 | 0 | 1 | 1 | 1 | (+сдвинутое 3) | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | ||||||||||||||||||||||||||||||||||||||||
0 | 0 | 0 | 1 | 1 | 1 | = +3 | 0 | 1 | 0 | 1 | 1 | = –9 | 0 | 0 | 0 | 1 | 1 | 1 | = +3 |
3. Умножение Операция умножения осуществляется посредством последовательных сложений и сдвигов.
Примеры.
а) |
2 |
~ |
0 |
0 |
1 |
1 |
0 |
б) |
3 |
~ |
0 |
0 |
1 |
1 |
1 |
||||||
х |
х |
||||||||||||||||||||
5 |
~ |
0 |
0 |
1 |
0 |
1 |
–3 |
~ |
0 |
1 |
1 |
0 |
1 |
||||||||
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
||||||||||||
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
|||||||||||||
0 |
1 |
1 |
1 |
1 |
0 |
= +10 |
0 |
0 |
1 |
1 |
1 |
||||||||||
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
= –9 |
4. Деление. Пусть требуется разделить число u на a и получить частное w, т. е. u : a = w.
Введем следующие обозначения:
ak – a, сдвинутое на k разрядов влево;
ui+1=ui – ak,, на каждом шаге алгоритма индекс у ui увеличивается на 1;
N(u) – номер разряда старшей значащей цифры.
Разрядность частного w равна k+1:
(?2)k, (?2)k-1, ..., (?2)0.
Алгоритм деления.
1. Сдвигаем a на k разрядов влево до тех пор, пока старшая значащая цифра у a не станет под старшей значащей цифрой u, таким образом:
a ® ak, т. е. a преобразуется в ak;
u = u0, т. е. u присваивается начальное обозначение u0.
2.
Вычитаем u0 – ak, т. е. u1 = u0+ak+(–2) ak.
3. Если N(ui+1)=N(ak), то записываем "1" в разряд (–2)k
частного и еще раз вычитаем ak.
4. Если N(ui+1)<N(ak), то записываем "1" в разряд (–2)k частного и ak
меняем на ak-1, т. е. сдвигаем ak на 1 разряд вправо и вычитаем ak-1.
5. Если N(ui+1)>N(ak), то записываем "0" в разряд (–2)k
частного, ui+1
заменяем на ui,
ak меняем на ak-1 и производим вычитание.
6. Процесс завершается, если ui+1=0.
Замечание 1. Результат "0" или "1" записывается в разряд частного с весом (–2)k, где k – индекс у a.
Замечание 2. Возможен случай, когда в один и тот же разряд частного записывается несколько значений. Тогда для получения частного необходимо дополнительно выполнить одну операцию сложения.
Пример 1. Пусть необходимо число 14 разделить на число 2, т. е. u0=14, a=2. Тогда 14~10010(–2), 2~110(–2). Для выравнивания делимого и делителя сдвигаем a на два разряда влево, т. е. a® a2 =11000.
Структура частного w:
Веса разрядов |
(–2)2 |
(–2)1 |
(–2)0 |
|
Частное |
+1 |
+1 |
+1 |
|
+1 |
||||
110 |
1 |
1 |
= 7 |
Процесс деления:
1 |
0 |
0 |
1 |
0 |
u0 |
|||||
1 |
1 |
0 |
0 |
0 |
a2 |
|||||
Записываем |
1 |
1 |
0 |
0 |
0 |
|||||
"1" во второй разряд |
¬ |
0 |
1 |
1 |
0 |
1 |
0 |
u1 |
N(u1)=N(a2) |
|
1 |
1 |
0 |
0 |
0 |
a2 |
|||||
Записываем |
1 |
1 |
0 |
0 |
0 |
|||||
"1" во второй разряд |
¬ |
0 |
0 |
0 |
0 |
1 |
0 |
u2 |
N(u2)<N(a2) |
|
1 |
1 |
0 |
0 |
a1 |
||||||
Записываем |
1 |
1 |
0 |
0 |
||||||
"1" в первый разряд |
¬ |
0 |
0 |
0 |
1 |
1 |
0 |
u3 |
N(u3)<N(a1) |
|
1 |
1 |
0 |
a0 |
|||||||
Записываем |
1 |
1 |
0 |
|||||||
"1" в нулевой разряд |
¬ |
0 |
0 |
0 |
0 |
0 |
0 |
u4 |
N(u4)<N(a0) |
|
Процесс stop, ибо u4=0.
Пример 2. Пусть u0=12, a=2. Тогда 12 ~ 11100(–2), 2 ~ 110(–2).
a® a2 =11000.
Структура частного w:
Веса разрядов |
(–2)2 |
(–2)1 |
(–2)0 |
|
Частное |
1 |
0 |
1 |
|
1 |
||||
110 |
1 |
0 |
= 6 |
Процесс деления:
1 |
1 |
1 |
0 |
0 |
u0 |
||||||
1 |
1 |
0 |
0 |
0 |
a2 |
||||||
1 |
1 |
0 |
0 |
0 |
|||||||
Записываем |
|||||||||||
"1" во второй разряд |
¬ |
0 |
0 |
0 |
1 |
0 |
0 |
u1 |
N(u1)<N(a2) |
||
1 |
1 |
0 |
0 |
a1 |
|||||||
Записываем |
1 |
1 |
0 |
0 |
|||||||
"0" в первый разряд |
¬ |
1 |
1 |
0 |
0 |
0 |
u2 |
N(u2)>N(a1) |
u1 возврат
0 |
0 |
1 |
0 |
0 |
u1 |
||||||
0 |
1 |
1 |
0 |
a0 |
|||||||
Записываем |
0 |
1 |
1 |
0 |
|||||||
"1" в нулевой разряд |
¬ |
0 |
0 |
1 |
1 |
0 |
u2’ |
N(u2’)=N(a0) |
|||
|
0 |
1 |
1 |
0 |
|
||||||
Записываем |
0 |
1 |
1 |
0 |
|||||||
"1" в нулевой разряд |
¬ |
0 |
0 |
0 |
0 |
0 |
u3 |
N(u3)<N(a0) |
Процесс окончен, так как u3=0.