Page 8 - М.Ю. Барышникова, А.Ф. Деон, А.В. Силантьева - СКОРОСТНЫЕ СВОЙСТВА АЛГОРИТМОВ СЛОЖЕНИЯ И ВЫЧИТАНИЯ ЦЕЛЫХ ЧИСЕЛ ПРОИЗВОЛЬНОГО РАЗМЕРА

Проверка условия
tranzit ==
0
занимает одну операцию. Если усло-
вие истинно, то выполняют две операции на реализацию выражения
c
[
m
1]
= 43
.
При ложном условии выполняются пять операций для
c
[
m
1]
= 1
;
и
c
[
m
+ +] = 43
.
Таким образом, на третьем этапе выпол-
няется следующее количество операций:
W
BinaryAdd
3
min
= 1 + 2 = 3;
W
BinaryAdd
3
max
= 1 + 5 = 6
.
Подводя итог оценки скоростных свойств функции сложения без-
знаковых чисел, можно записать следующие формулы для чисел в
n
байт:
BA
min
=
W
BinaryAdd
1
min
+
W
BinaryAdd
2
min
+
W
BinaryAdd
3
min
=
= 13 + 12
n
9
+ 3 = 7 + 12
n
;
BA
max
=
W
BinaryAdd
1
max
+
W
BinaryAdd
2
max
+
W
BinaryAdd
3
max
=
= 9 + 5
n
+ 13
n
10
+ 6 = 5 + 18
n.
Вычитание чисел без учета знаков.
Поразрядное вычитание чи-
сел без учета знаков
c
=
a
b
дает правильный результат, если
a > b
,
например,
(
+9)
(
+5) = +4
.
Необходимо предусмотреть заимство-
вание из старших разрядов, если некоторый разряд в числе
a
меньше
соответствующего разряда в числе
b
.
В случае, когда
a < b
,
результат вычитания
c
=
a
b
становится
отрицательным, например,
(
+5)
(
+9) =
4
.
Чтобы воспользоваться
алгоритмом поразрядного вычитания, необходимо взять дополнение
каждой цифры в результате поразрядного вычитания до ближайше-
го целого числа, кратного 10. Это означает, что занимаемая единица
для старшего разряда не находится в числе
a
.
Именно знак ‘–‘ ре-
зультата указывает на недостаточное количество единиц, что можно
определить через дополнение поразрядного вычитания. Реализацию
этого алгоритма показывает функция
BinarySubtract
( ),
которая вы-
полняет вычитание чисел без учета знаков, выдавая на выходе соот-
ветствующий положительный или отрицательный результат. Функция
BinarySubtract
( )
возвращает количество байт в массиве результата
c
=
a
b
:
//
Беззнаковое вычитание байтовых чисел в обратном порядке
#
include "BinaryAlign.h" //выравнивание байтовых целых чисел
int BinarySubtract( unsigned char* c,
unsigned char* a, int* pna,
unsigned char* b, int* pnb )
{
int na = *pna; //длина массива a
46
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2012