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

  • Автор темы Rendall
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rendall

Гость
#1
Задача:

Написать программу, используя только побитовые операции и выполнить на тестовых данных. Реализовать вычисление целочисленного остатка от деления 2-х чисел а и b (int a, b ).
Насколько я понял, пользователь вводит 2 числа в десятеричной системе, программа переводит их в двоичную, делит, а затем выводит на экран остаток от деления в двоичной и десятеричной системе. Проблема заключается в том, что я не умею делить в двочной системе и совсем не разбираюсь в побитовых операциях, поэтому очень нужна ваша помощь
 
R

rrrFer

Гость
#2
Проблема заключается в том, что я не умею делить в двочной системе и совсем не разбираюсь в побитовых операциях, поэтому очень нужна ваша помощь
научись, разберись. Или не решай задачу вовсе - зачем тебе ее дали если ты не разбираешься?

Добавлено:
Насколько я понял, пользователь вводит 2 числа в десятеричной системе, программа переводит их в двоичную, делит, а затем выводит на экран остаток от деления в двоичной и десятеричной системе.
понял неправильно. В задаче ничего не сказано про вывод на экран в двоичной и десятичной системе, на экран можно вообще не выводить( в задаче сказано лишь про "вычисление"). Но надо как-то проверить работоспособность программы - самое банальное - вывести резальтат работы на экран, рассчитать результат вручную, и сравнить результаты.

Про перевод в двоичную в условии задаче тоже ничего не сказано. Хватит фантазировать - работай )
 
R

Rendall

Гость
#3
это не фантазии, это лабораторная работа по с++ ;) , есть пример кода где числа в двоичном представлении складываются "в столбик" надо переделать чтоб делились и выводить остаток, вывод данных на экран или в файл.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
C++:
//Example
//подключаемые файлы с прототипами функций

#include "stdafx.h"
#include <iostream>
#include <clocale>

//вывод двоичного представления десятичного числа х
void BinOut(unsigned char x);
//вычисление суммы двух чисел в "столбец"
unsigned char BinAdd(unsigned char a, unsigned char b);
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char a, b, sum;
setlocale(0, "Rus");
printf("Введите a: ");
scanf_s("%d", &a);
printf("Двоичное представление a: ");
BinOut(a);
printf("\nВведите b: ");
scanf_s("%d", &b);
printf("Двоичное представление b: ");
BinOut(b);
//вычисление суммы в "столбец"
sum = BinAdd(a, b);
printf("\nДесятичное представление a + b = %d\n", sum);
printf("Двоичное представление a + b = ");
BinOut(sum);
printf("\n");
//описание указателя на структуру типа FILE
FILE* stream;
errno_t err;
//открытие файла для записи данных (в случае отсутствия файла с таким именем - создание)
err = fopen_s(&stream, "test.txt", "w+" );
if( err == 0 )
{
fprintf(stream, "Десятичное представление\n a = %d, b = %d\n a + b = %d", a, b, sum);
fclose(stream);
}
else
printf( "Файл 'test.txt' не был открыт\n" );
system("pause");
return 0;
}
void BinOut(unsigned char x)
{
for (int i = 0; i < 8; i++)
{
if (x & 0x80)
putchar('1');
else
putchar('0');
x=x<<1;
}
}
unsigned char BinAdd(unsigned char a, unsigned char b)
{
unsigned char mem = 0, rez = 0;
for (int i = 0; i < 8; i++)
{
rez>>=1;
if (((a>>i)&1)^((b>>i)&1))
{
if (!(mem&1))
rez|=0x80;
}
else
if ((a>>i)&1)
if (mem)
{
mem = 1;
rez|=0x80;
}
else
mem=1;
else
if (mem)
{
mem = 0; rez|=0x80;
}
}
return rez;
}
 
Статус
Закрыто для дальнейших ответов.