Деление двоичных чисел
Деление двоичных чисел
Где есть алгоритм деления без восстановления остатка. В связи с чем у меня возникли вопросы: 1. Почему именно два знаковых разряда в двоичном числе? 2. В операции сдвига влево участвует все число или только его количественная часть?
Код:
void printb(int value);
int main(int argc, char* argv[])
{
int value = 0, div = 0;
printf("value="); scanf("%d",&value);
printf("div="); scanf("%d",&div);
int delta = 0;
printf("\nprecision="); scanf("%d",&delta);
int remd = 0;
bool s = value < 0 || div < 0;
if ((remd = value - div) < 0)
{
int reg = 0;
while(--delta >= 0)
{
div = remd > 0 ? -div : div;
remd = (remd << 1) + div;
div = div < 0 ? -div : div;
reg = (reg ^ (remd > 0)) << 1;
}
reg = s ? -reg : reg;
printf("\nResult = ");
printb(value); printf(" / ");
printb(div); printf(" = ");
printb(reg >> 1); printf("\n");
scanf("%d",®);
}
return 0;
}
void printb(int value)
{
int *pn = new int[32];
for (int i = 0; abs(value) >= 1; i++, value/=2)
pn[i] = abs(value) % 2;
for (int x = i-1; x >= 0; x--)
printf("%d",pn[x]);
}
int main(int argc, char* argv[])
{
int value = 0, div = 0;
printf("value="); scanf("%d",&value);
printf("div="); scanf("%d",&div);
int delta = 0;
printf("\nprecision="); scanf("%d",&delta);
int remd = 0;
bool s = value < 0 || div < 0;
if ((remd = value - div) < 0)
{
int reg = 0;
while(--delta >= 0)
{
div = remd > 0 ? -div : div;
remd = (remd << 1) + div;
div = div < 0 ? -div : div;
reg = (reg ^ (remd > 0)) << 1;
}
reg = s ? -reg : reg;
printf("\nResult = ");
printb(value); printf(" / ");
printb(div); printf(" = ");
printb(reg >> 1); printf("\n");
scanf("%d",®);
}
return 0;
}
void printb(int value)
{
int *pn = new int[32];
for (int i = 0; abs(value) >= 1; i++, value/=2)
pn[i] = abs(value) % 2;
for (int x = i-1; x >= 0; x--)
printf("%d",pn[x]);
}