ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
6
for( int i = 0; i < nv; i++ ) // цикл побайтового вычитания
{ signed char d = u[i] - tranzit - v[i];
if( d < 0 ) { d = 10 + d; tranzit = 1; }
else tranzit = 0;
s[i] = d;
}
if( tranzit == 0 ) // положительный результат
{ s[nv] = 43; // знак '+'
return nv+1;
}
s[0] = 10 - s[0]; // формирование отрицательного результата
for( int i = 1; i < nv; i ++ ) s[i] = 9 - s[i];
s[nv] = 45; // знак '-'
return nv+1;
}
В представленной ниже программе
HI03
выполняется вычитание
s a b
= −
введенных чисел
a
и
b
. Функция вычитания
SingleSubtract
( )
находится в подключаемом файле
#include "SingleSubtract.h"
:
// Program HI03 (Win32)
// Выровненное вычитание байтовых целых чисел
#include <conio.h> // _getch
#include <iostream>
using namespace std;
#include "InputAB.h"
#include "SingleSubtract.h"
void main(void)
{ char sa[256]; // символьный буфер целого числа a
unsigned char a[256]; // байтовый массив целого числа a
char sb[256]; // символьный буфер целого числа b
unsigned char b[256]; // байтовый массив целого числа b
InputAB( sa, a, sb, b ); // ввод чисел a и b
int na = strlen( sa ); // байтовая длина числа a
// Выровненное вычитание s = a - b
unsigned char s[256]; // для результата вычитания
int ns = SingleSubtract( s, a, b, na-1 ); // s = a - b
cout << "s = a - b = "; ByteBitPrint( s, ns ); // результат
_getch(); // просмотр результата
}
Если при выполнении программы
HI03
ввести числа
25
a
=
и
9
b
=
, то на мониторе появится следующий результат:
sa = +25
a = 00000010 00000101 00101011
sb = +09
b = 00001001 00000000 00101011
s = a – b = 00000110 00000001 00101011
В теле функции
SingleSubtract
( )
на первом этапе будет выполне-
на одна инструкция
unsigned char tranzit = 0
, которая занимает одну
операцию:
1
1.
W
=
На втором этапе выполняется инструкция цикла с заголовком
for
(
int i = 0
;
i < nv
;
i++
). Выражение
int i = 0
занимает одну опера-
1,2,3,4,5 7,8,9,10,11,12,13,14,15,16,...18