ISSN 2305-5626. Вестник МГТУ им. Н.Э. Баумана: электронное издание. 2013
9
#include "SingleMultiply.h"
#include "SingleSubtract.h"
#include "DichMult.h"
#include "DMultiplier.h"
#include "ByteBitDiv.h"
void main(void)
{
char sa[256]; // символьный буфер целого числа a
unsigned char a[256];
char sb[256]; // символьный буфер целого числа b
unsigned char b[256];
InputAB( sa, a, sb, b ); // ввод чисел a и b
int na = strlen( sa ); // количество цифр в числе a
int nb = strlen( sb ); // количество цифр в числе b
// Деление байтовых целых чисел
unsigned char c[256]; // для результата умножения
unsigned char s[256]; // для промежуточного вычитания
int nc = ByteBitDiv( c, a, na, b, nb, s ); // c = a / b
cout << "c = a / b = "; ByteBitPrint( c, nc ); // результат
cout << "s = "; ByteBitPrint( s, nb-1 ); // листинг остатка
_getch(); // просмотр результата
}
Если при запуске программы
DI01
ввести числа
96918
a
=
и
999
b
= −
, то на мониторе окажется результат
c = a / b = – 97
с остат-
ком
15 :
s
=
sa = +96918
a = 00001000 00000001 00001001 00000110 00001001 00101011
sb = -999
b = 00001001 00001001 00001001 00101101
c = a / b = 00000111 00001001 00101101
s = 00000101 00000001 00000000
Деление целых чисел произвольного размера в байтовом пред-
ставлении проводится в приведенной ниже функции
ByteBitDiv
( ).
Параметр
unsigned char* c
является указателем на массив результата
частного
,
a
c
b
=
параметр
unsigned char* a
— на байтовый массив
делимого
a
со знаком. Длина массива находится в параметре
int na
.
Параметры
unsigned char* b, int nb
содержат аналогичную информа-
цию для делителя
b
. Байтовый массив
unsigned char* s
содержит
остаток без знака. Функция
ByteBitDiv
( ) возвращает длину массива
c
:
// Файл ByteBitDiv (Win32)
// Деление байтовых целых чисел
int ByteBitDiv( unsigned char* c, unsigned char* a, int na,
unsigned char* b, int nb,
unsigned char* s )
{ int nc = DichMult2( c, a, na, b, nb, s );
int k = nc - 1; // позиция старшей цифры
if( c[k] != 0 ) k += 1;
if( a[na-1] == b[nb-1] ) c[k] = 43; // знак '+'
else c[k] = 45; // знак '-'
return k + 1; // длина c = a / b со знаком
}
1,2,3,4,5,6,7,8 10,11