Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Деление двоичных чисел

445
25 марта 2012 года
Charley
176 / / 16.08.2011
Надо на C++ реализовать деление двоичных чисел без восстановления остатка. Нашел по этому поводу статью:
Деление двоичных чисел
Где есть алгоритм деления без восстановления остатка. В связи с чем у меня возникли вопросы: 1. Почему именно два знаковых разряда в двоичном числе? 2. В операции сдвига влево участвует все число или только его количественная часть?
67K
26 марта 2012 года
NoXCode
64 / / 11.03.2012
Код:
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",&reg);
    }

    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]);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог