0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14

Деление в двоичной системе счисления с остатком

09.06.2021, 13:34. Показов 7767. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите пожалуйста реализовать программу деления 23 разрядного двоичного числа на 12 разрядное двоичное число
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2021, 13:34
Ответы с готовыми решениями:

Деление чисел с плавающей точкой в двоичной системе счисления
Доброго времени суток,форумчане! Нужна ваша помощь в написании программы.Суть задачи поделить два числа с плавающей точкой в двоичной...

Деление в двоичной системе счисления
не могу сделать деление в двоичной СС в паскале чтоб например: вводишь 2 числа какие-нибуть в десятичной сс, они преобразовываются в...

Деление в двоичной системе счисления
Здравствуйте! Помогите пожалуйста разделить в двоичной системе счисления 11111,1:100,1

15
Злостный нарушитель
 Аватар для Verevkin
10053 / 5515 / 1244
Регистрация: 12.03.2015
Сообщений: 25,650
09.06.2021, 13:40
Цитата Сообщение от IgorKISIALIYOV Посмотреть сообщение
помогите пожалуйста реализовать программу деления 23 разрядного двоичного числа на 12 разрядное двоичное число
А чего не получается?
В цифровой электронике все числа двоичные.
0
Модератор
Эксперт С++
 Аватар для zss
13761 / 10957 / 6488
Регистрация: 18.12.2011
Сообщений: 29,219
09.06.2021, 13:44
Странная какая-то постановка задачи.
Можно просто поделить
unsigned int - 32 разрядное двоичное число (21 разряд влезет),
на
unsigned short - 16 разрядное разрядное двоичное число (12 разрядов влезет)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <bitset> 
using namespace std;
unsigned short div(unsigned int a,unsigned short b)
{
    return (unsigned short)(a%b);
}
int main()
{
   unsigned int x;
   unsigned short y;
   cin>>x>>y; // ввод десятичного представления чисел
   cin.get();
   x &= 0x007FFFFF; // обнулить разряды старше 23-го
   y &= 0x0FFF; // обнулить разряды старше 12-го
   bitset<12> b( div(x,y) );
   cout<<b<<endl; // вывод двоичного представления b
   cin.get();
   return 0;
}
Можно вообще завуалировать, что деление выполняется с 32 разрядными целыми числами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <bitset> 
#include <cstdlib> 
using namespace std;
bitset<12> div(bitset<23> a,bitset<12> b)
{
    return bitset<12>(a.to_ulong()%b.to_ulong());
}
int main()
{
   bitset<23> x;
   bitset<12> y;
   cin>>x; // ввод двоичного представления x
   cin>>y;  // ввод двоичного представления y
   cin.get();
   bitset<12> b = div(x,y);
   cout<<b<<endl;  // вывод двоичного представления b
   cin.get();
   return 0;
}
0
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
09.06.2021, 14:02  [ТС]
тут немного не правильно сказал есть деление столбиком тоесть при делении 10010011100111110001101 на 110001110101 остаток будет 01000101110
0
Злостный нарушитель
 Аватар для Verevkin
10053 / 5515 / 1244
Регистрация: 12.03.2015
Сообщений: 25,650
09.06.2021, 14:07
Цитата Сообщение от IgorKISIALIYOV Посмотреть сообщение
статок будет 01000101110
у меня 101010110001 получилось. ЧЯДНТ?
0
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
09.06.2021, 14:16  [ТС]
суть в чём, первые 12 разрядов из 23 битного слова делим на второе, к остатку добавляем 13 бит исходного слова снова делим, потом к остатку добавляем 14 бит и снова делим и так до конца исходного слова в результате остаётся последний остаток. он то мне и нужен
0
Модератор
Эксперт С++
 Аватар для zss
13761 / 10957 / 6488
Регистрация: 18.12.2011
Сообщений: 29,219
09.06.2021, 17:22
Цитата Сообщение от IgorKISIALIYOV Посмотреть сообщение
12 разрядов из 23 битного слова делим на второе
Чтобы поделить, придется второе число и эти 12 разрядов превратить в двоичные числа типа unsigned short(16-разрядные)
и после этого их поделить.
И это вместо того, чтобы 23 битное слово превратить в 32 разрядное число и поделить всего один раз (как в моем примере).
Садизм какой-то!

Такой алгоритм был бы оправданным, если бы пришлось делить длинные десятичные числа представленные в виде массива десятичных цифр.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
09.06.2021, 17:24
да в виде строки столбиком ему надо поделить. классическая школьная задача по программированию. только обычно инвестируется больших числах, чтобы никто не схитрил преобразуя в int.
0
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
09.06.2021, 18:58  [ТС]
Здесь дело не в хитрости, и не в правильности результата, это обычное деление полиномов
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
09.06.2021, 20:53
Лучший ответ Сообщение было отмечено IgorKISIALIYOV как решение

Решение

В исходном сообщении вроде не сказано, что речь о делении полиномов.
Ну, например, так. Несколько избыточно, но, вроде, верно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <cassert>
 
unsigned poly_div_23_by_12(unsigned a, unsigned b)
{
    if (b == 0)
        return 0;
    assert(b > 0);
    assert((a & 0x7FFFFF) == a); // a - 23-bit value
    assert((b & 0xFFF) == b); // b - 12-bit value
    
    int cnt = 0;
    unsigned mask = 1 << 22;
    while (not (b & mask))
    {
        b <<= 1;
        ++cnt;
    }
 
    while (cnt-- >= 0)
    {
        if (a & mask)
            a ^= b;
        b >>= 1;
        mask >>= 1;
    }
    
    return a;
}
 
 
int main()
{
    unsigned a = 4837261;
    unsigned b = 3189;
 
    std::cout << poly_div_23_by_12(a, b) << std::endl;
}
1
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
11.06.2021, 09:46  [ТС]
Большое спасибо, выручили
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
14.06.2021, 18:27
Добавил вычисление частного и слегка переделал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <bitset>
#include <iostream>
#include <cassert>
 
struct poly_div_result
{
    unsigned quotient;
    unsigned remainder;
};
 
poly_div_result poly_div_23_by_12(unsigned a, unsigned b)
{
    poly_div_result res;
    res.quotient = 0;
    res.remainder = 0;
    if (b == 0)
        return res;
    assert(b > 0);
    assert((a & 0x7FFFFF) == a); // a - 23-bit value
    assert((b & 0xFFF) == b); // b - 12-bit value
 
    int cnt = 0;
    unsigned mask = b;
    while ((mask & mask-1) > 0)
    {
        mask &= mask-1;
    }
 
    while (2*mask <= a)
    {
        mask <<= 1;
        b <<= 1;
        ++cnt;
    }
 
    while (cnt-- >= 0)
    {
        res.quotient <<= 1;
        if (a & mask)
        {
            a ^= b;
            res.quotient += 1;
        }
        b >>= 1;
        mask >>= 1;
    }
    res.remainder = a;
    return res;
}
 
 
int main()
{
    unsigned a = 0b10010011100111110001101; // 4837261
    unsigned b = 0b110001110101; // 3189
 
    poly_div_result r = poly_div_23_by_12(a, b);
    std::cout << "quotient:  0b" << std::bitset<23>(r.quotient) << std::endl;
    std::cout << "remainder: 0b" << std::bitset<12>(r.remainder) << std::endl;
}
0
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
14.06.2021, 21:52  [ТС]
а если отдельной функцией?
просто тот фрагмент я уже добавил в свою программу, не хотелось бы весь код переделывать
остаток уже нашёл своё место, осталось частное
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
14.06.2021, 22:04
Ну повтори ту функцию. Там отличия-то только в последнем цикле. Перед циклом обнулить quotient, а после цикла вернуть его.
0
0 / 0 / 0
Регистрация: 26.05.2021
Сообщений: 14
14.06.2021, 23:23  [ТС]
Вы уж простите, но ваш алгоритм для меня является чёрным ящиком, я совершенно не понимаю структуры и битовые операции
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
15.06.2021, 00:44
Ну это не очень здорово. Но там особо нечего понимать, достаточно было сравнить 2 функции.
Вот эта будет возвращать только частное.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
unsigned poly_div(unsigned a, unsigned b)
{
    if (b == 0)
        return 0;
    assert(b > 0);
    assert((a & 0x7FFFFF) == a); // a - 23-bit value
    assert((b & 0xFFF) == b); // b - 12-bit value
    
    int cnt = 0;
    unsigned mask = 1 << 22;
    while (not (b & mask))
    {
        b <<= 1;
        ++cnt;
    }
 
    unsigned quotient = 0;
    while (cnt-- >= 0)
    {
        quotient <<= 1;
        if (a & mask)
        {
            a ^= b;
            quotient += 1;
        }
        b >>= 1;
        mask >>= 1;
    }
    
    return quotient;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2021, 00:44
Помогаю со студенческими работами здесь

Деление в двоичной системе счисления
Добрый день, помогите, пожалуйста, написать программу для деления двух чисел в двоичной СС. Полазил по форуму - не нашел решений. Заранее...

Деление в двоичной системе счисления
Нужно поделить 924 = 1110011100 (в двоичной системе) на 22 = 10110 (в 2ой системе), и мне нужен весь алгоритм решения... ПОЖАЛУЙСТА...

Деление в двоичной системе счисления
Собственно проблема вся сказана в названии. Нужен алгоритм, а лучше исходник,не наделаю кучи багов, которые потом буду отлавливать, на...

Деление в двоичной системе счисления. / Алгоритмы
ПОМОГИТЕ СДЕЛАТЬ. НУЖНО ОЧЕНЬ. Виконати операцію ділення двійкових дробів з встановленням залишку по відомим двом схемам ділення і без...

Деление в двоичной системе счисления. / Алгоритмы
ПОМОГИТЕ СДЕЛАТЬ. НУЖНО ОЧЕНЬ ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
Создаем микросервисы с Go и Kubernetes
golander 02.07.2025
Когда я только начинал с микросервисами, все спорили о том, какой язык юзать. Сейчас Go (или Golang) фактически захватил эту нишу. И вот почему этот язык настолько заходит для этих задач: . . .
C++23, квантовые вычисления и взаимодействие с Q#
bytestream 02.07.2025
Я всегда с некоторым скептицизмом относился к громким заявлениям о революциях в IT, но квантовые вычисления - это тот случай, когда революция действительно происходит прямо у нас на глазах. Последние. . .
Вот в чем сила LM.
Hrethgir 02.07.2025
как на английском будет “обслуживание“ Слово «обслуживание» на английском языке может переводиться несколькими способами в зависимости от контекста: * **Service** — самый распространённый. . .
Использование Keycloak со Spring Boot и интеграция Identity Provider
Javaican 01.07.2025
Два года назад я получил задачу, которая сначала показалась тривиальной: интегрировать корпоративную аутентификацию в микросервисную архитектуру. На тот момент у нас было семь Spring Boot приложений,. . .
Содержание темы с примерами на WebGL
8Observer8 01.07.2025
Все примеры из книги Мацуды и Ли в песочнице JSFiddle Пример выводит точку красного цвета размером 10 пикселей на WebGL 1. 0 и 2. 0 WebGL 1. 0. Передача координаты точки из главной программы в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru