Форум программистов, компьютерный форум CyberForum.ru

Перевод в двоичную систему счисления - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 79, средняя оценка - 4.89
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
21.11.2013, 23:47     Перевод в двоичную систему счисления #1
Пожалуйста, помогите с задачкой. Даны два числа a, b их нужно сперва перевести в двоичную систему счисления (сами они из десятичной), а потом сложить. Можете объяснить как программа должна работать? Вообще не понимаю... Это с остатком нужно что ли что-то делать? Делить на два?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2013, 23:47     Перевод в двоичную систему счисления
Посмотрите здесь:

C++ Перевод дробных чисел из десятичной в двоичную систему счисления
Перевод целого числа в двоичную систему счисления C++
C++ Перевод целого десятичного числа в двоичную систему счисления
Перевод чисел в двоичную систему счисления C++
Перевести число в двоичную систему счисления C++
Перевод букв и чисел в двоичную систему счисления C++
C++ Перевести с десятичной в двоичную систему счисления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Darthriddikc
10 / 10 / 0
Регистрация: 23.12.2012
Сообщений: 45
22.11.2013, 17:43     Перевод в двоичную систему счисления #2
Не знаю нужно вам это ещё? Просто я недавно практически такое же знакомому делал.

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

14/2 = 7 остаток 0
7/2 = 3 остаток 1
3/2 = 1 остаток 1
1/2 = 0 остаток 1

Процесс деления завершён, так как последнее частное стало равно 0.
Теперь запишем все остатки подряд от последнего к первому, и мы получим
число в двоичной системе — 11102

Не по теме:

Вообще так десятичную систему можно перевести в любую систему исчисления, только надо делить на основание системы в которую надо перевести, например для того чтобы перевести из десятичной в шестнадцатеричную нужно делить на 16, в восьмеричную на 8 и т.д.


Данная программа переводит два десятичных 32-ух разрядных целых беззнаковых числа в двоичные и складывает их
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>
using namespace std;
/* функция transferIn2 переводит десятичное число num_10, в двоичное num_2 (сохраняет результат в массив,
   который был передан как параметр указателя num_2) */
void transferIn2 (int num_10, bool* num_2)
{
    int i, j=0; // для циклов
    /* temp - для временного хранения разряда из правой половины, которое потом перейдёт в левую половину
       при преобрвзовании порядка по принципу от последнего к первому */
    bool temp;
    for(i=0; i<32; i++) //обнуляем все элементы (разряды)
        num_2[i]=0;
    i=0;
    while(1)
    {
        num_2[i]=num_10%2; // десятичное число делют по модулю на 2 (т.е. в num_2[i] записывается сам остаток от деления на 2)
        if(!(num_10/2)) // если деление без модуля (без остатка) на 2 стало равнятся 0, то...
        {
            while(1) // цикл, который поменяет порядок значений элементов в массиве по принципу от последнего к первому
            {
                temp=num_2[31-j]; // в temp сохраняется разряд из правой половины
                num_2[31-j]=num_2[j]; // в разряд из праой половины сохраняется соответствующий зеркальный разряд левой половины
                num_2[j]=temp; // в разряд левой половины сохраняется значение из temp (бывший разряд из правой половины)
                if (!i) // если i=0, то...
                    break; // цикл завершается
                j++; i--;
            }
            break; // цикл завершается
        }
        num_10/=2; // десятичное число делют без модуля (без остатка)
        i++;
    }
}
int main()
{
    unsigned int a_10, b_10;
    int i; // для циклов
    /* a_2, b_2 - массивы из 32 элементов (32 разряда), будут хранить двоичное представление a_10 и b_10 соответственно; 
       sum_2 - массивы из 32 элементов (32 разряда), будет хранить двоичную сумму;
       lo - займ (перенос) в соседний бит при переполнении разряда (если результат больше 1) при сложении */
    bool a_2[32], b_2[32], sum_2[32]={NULL}, lo=0;
    cin>>a_10>>b_10;
    transferIn2(a_10,a_2);
    transferIn2(b_10,b_2);
    cout<<endl<<a_10<<"d = ";
    for (i=0; i<32; i++)
        cout<<a_2[i];
    cout<<'b'<<endl<<endl;
    cout<<b_10<<"d  = ";
    for (i=0; i<32; i++)
        cout<<b_2[i];
    cout<<'b'<<endl<<endl;;
    for(i=31; i>=0; i--) // цикл для сложения двух двоичных чисел
    {
        if ((a_2[i]+b_2[i])>1) // если сумма разрядов больше 1, то...
        {
            if (lo) // если был осуществлён перенос (lo=1), то...
                sum_2[i]=1; // сумма двух разрядов равна 1
            else // напротив (если не было переноса (lo=0)), то...
            {
                sum_2[i]=0; // сумма двух разрядов равна 0
                lo=1; // был осуществлён перенос
            }
        }
        if ((a_2[i]+b_2[i])==1) // если сумма разрядов равна 1, то...
        {
            if (lo) // если был осуществлён перенос (lo=1), то...
                sum_2[i]=0; // сумма двух разрядов равна 0
            else // напротив (если не было переноса (lo=0)), то...
                sum_2[i]=1; // сумма двух разрядов равна 1
        }
        if (!(a_2[i]+b_2[i])) // если сумма разрядов равна 0, то...
        {
            if (lo) // если был осуществлён перенос (lo=1)), то...
            {
                sum_2[i]=1; // сумма двух разрядов равна 1
                lo=0; // сброс переноса
            }
            else // напротив (если не было переноса (lo=0)), то...
                sum_2[i]=0; // сумма двух разрядов равна 0
        }
    }
    cout<<"a_2+b_2=";
    for (i=0; i<32; i++)
        cout<<sum_2[i];
    cout<<'b'<<endl;
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
22.11.2013, 17:55     Перевод в двоичную систему счисления #3
Бред! А ничего, что все переменные и константы в программе и так хранятся в двоичной системе? Перевод в/из десятичной системы вводимых пользователем чисел осуществляется сразу в функциях ввода-вывода.
Darthriddikc
10 / 10 / 0
Регистрация: 23.12.2012
Сообщений: 45
22.11.2013, 19:49     Перевод в двоичную систему счисления #4
Ну я так понимаю ему по заданию нужно составить сам алгоритм перевода, как еслибы в ручную считать, знакомому, которому я делал, например именно так и задали сделать.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
22.11.2013, 22:15     Перевод в двоичную систему счисления #5
Итак, как я уже сказал, программа и так хранит все переменные в двоичной системе. Для вывода числа в двоичной системе достаточно пройтись по его битам битовой маской, наприм4р:
C++
1
2
3
4
5
6
7
8
void printInt(int x){
  int mask=0x80;
  mask<<=8*(sizeof(int)-1);
  while(mask&x)mask>>=1;
  do{
    putchar((mask&x)?'1':'0';
  }while(mask>>=1);
}
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
22.11.2013, 23:25     Перевод в двоичную систему счисления #6
Вот тебе код) Спрашивай, что непонятно) Использовал книгу Шилда)
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
#include "stdafx.h"
#include "iostream"
#include <clocale>
using namespace std;
void disp_binary(int u);
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE, "rus");
    int a,b,c;
    cout<<"Введите число a от 0 do 255: ";
    cin>>a;
    cout<<"Введите число b от 0 do 255: ";
    cin>>b; c=a+b;
    cout<<"Двоичное представление числа а:";
    disp_binary(a);
    cout<<"Двоичное представление числа b:";
    disp_binary(b);
    cout<<"Двоичное представление числа c:";
    disp_binary(c);
        system("pause");
    return 0;
}
 
void disp_binary(int u)
{
    register int i;
    for(i=128;i>0;i=i/2)
        if(u&i) cout<<"1";
        else cout<<"0";
        cout<<"\n";
}
Darthriddikc
10 / 10 / 0
Регистрация: 23.12.2012
Сообщений: 45
22.11.2013, 23:47     Перевод в двоичную систему счисления #7
Kuzia domovenok, убедили убедили Но говорят мой пример преподу тоже нравился
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
24.11.2013, 00:53  [ТС]     Перевод в двоичную систему счисления #8
Liden, пожалуйста, объясните как работает ваша программа.
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
24.11.2013, 20:04     Перевод в двоичную систему счисления #9
Ну вот смотри:
C++
1
2
3
4
5
6
 register int i;
    for(i=128;i>0;i=i/2)//запускаем цикл из десятичных цифр
        if(u&i) cout<<"1";//производим поразрядное (то есть каждый бит числа) умножение числа "u" на "i", если 
       //произведение равно единице выводим "1" 
        else cout<<"0";//в ином случае "0"
        cout<<"\n";
А теперь на примере:
1. На вход подаем 5. Это число передаем в функцию для вычисления его в двоичной системе
2. а)Цикл начинается с числа 128. 128 - это единица в 8 разряде числа (64 в 7-ой разряде, 32 - в 6-ом и тд), остальные разряды опускаются)Производим поразрядное И: [1]00000000 & [0]0000101=[0]0000000 => выводит 0;
б) Следующая итерация число 64. Производим поразрядное И: 0[1]000000 & 0[0]000101=00000000 => выводит 0;
...................................................................................................................................................................
Итерация с числом 4. Производим поразрядное И: 00000[1]00 & 00000[1]01=00000100 => выводит 1;
Суть в том, что единица последовательно перемещается через нули.
Надеюсь понятно объяснил)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 22:12     Перевод в двоичную систему счисления
Еще ссылки по теме:

C++ Перевод в двоичную систему счисления и запись результата в массив
Перевод из десятичной в двоичную систему счисления C++
C++ Перевод из восьмеричной в двоичную систему счисления
Перевод числа в двоичную систему счисления (при помощи функции) C++
Перевод числа в двоичную систему счисления C++

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

Или воспользуйтесь поиском по форуму:
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
24.11.2013, 22:12  [ТС]     Перевод в двоичную систему счисления #10
Liden, спасибо
Yandex
Объявления
24.11.2013, 22:12     Перевод в двоичную систему счисления
Ответ Создать тему
Опции темы

Текущее время: 21:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru