nb = m;
BinaryPrint( a, na ); //печать a
BinaryPrint( b, nb ); //печать b
_
getch(); //просмотр результата
}
Если после запуска программы AI03 ввести два числа +5 и +999,
то получим результат выравнивания +005 и +999:
sa = +5
00000101 00101011
sb = +999
00001001 00001001 00001001 00101011
00000101 00000000 00000000 00101011
00001001 00001001 00001001 00101011
Оценка скоростных свойств [3] выравнивания двух чисел опреде-
ляется количеством операций над целыми числами, выполняемых в
теле функции
BinaryAlign
2( ).
На первом этапе выполняется инструк-
ция
int k = nu – nv
,
в которой две операции (из перечня машинных
команд сложения, вычитания, загрузки, сохранения и сравнения) вы-
читание ‘–‘ и сохранение ‘=’. Обозначим это как
W
Alig
т
2
1
= 2
.
Затем следует второй этап, на котором выполняется инструк-
ция условия
if
(
k >
0
)
return BinaryAlign
(
v, nv, k
),
содержащая од-
ну операцию сравнения
k >
0
и инструкцию выполнения функции
BinaryAlign
( ).
Объявление функции
BinaryAlign
( )
содержит модифи-
катор
inline
,
который реализуется компилятором как непосредственная
подстановка тела функции, а не вызов с параметрами:
W
Align
2
2
= 2 +
A.
Количество операций
A
в функции
Align
( )
определяется ее телом:
int n = nz + k; //новое количество байт в числе z
unsigned char s = z[nz-1]; //запомнить знак числа
int n1= n-1;
for( int j = nz-1; j < n1; j++ ) z[j] = 0; //выравнивание
z[n1] = s; //приписать знак числа
На выполнение инструкции
intn
=
nz
+
k
затрачиваются две опе-
рации.
W
Align
1
= 2
.
42
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2012