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

Исправить программку. Побитовые операции - C++

Восстановить пароль Регистрация
 
Suomalainen
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 9
11.11.2013, 18:42     Исправить программку. Побитовые операции #1
Добрые люди, выручайте. Понимаю, что нагло, но другого выхода нет

Задача - Сложить 2 числовых значения в двоичном представлении с выводом промежуточных результатов при использовании типа unsigned char.

Код есть. Нужно раскрыть цикл, убрать функции и (bool). Подскажите, кто что может. Могу отблагодарить копеечкой Яндекс денег.

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
89
90
91
92
93
94
95
96
97
98
#include <iostream>
 
using namespace std;
void PrintBinary(unsigned char m)
{
    size_t sizetype=sizeof(unsigned char)*8;
    unsigned char MASK=1<<sizetype-1;
 
    //С помощью маски определяем значение каждого бита и выводим
    for (size_t i=sizetype;i>0;i--)
    {
        cout<<(bool)(m&MASK);
        m<<=1;
    }
}
 
void AddBinary(unsigned char x, unsigned char y)
{
    size_t sizetype=sizeof(unsigned char)*8;
    unsigned char MASK=1;
    bool transfer=false;  //перенос
    unsigned char result=0;
 
    for (size_t i=0;i<sizetype;i++)
    {
        cout<<"\nAdded "<<i+1<<" bit: \t";
        if (transfer==false)
        {
            if (x&y&MASK)  //Если оба бита единицы
            {
                transfer=true;
        
                PrintBinary(result);
                cout<<" 1+1=0 and transfer next 1";
            }
            else if ((x|y)&MASK)  //Если один из битов единица
            {
                result|=MASK;
 
                PrintBinary(result);
                cout<<' '<<(bool)(x&MASK)<<'+'<<(bool)(y&MASK)<<"=1";
            }
            else  //Если оба бита нулевые
            {
                PrintBinary(result);
                cout<<" 0+0=0";
            }
        }
        else
        {
            if (x&y&MASK)  //Если оба бита единицы
            {
                result|=MASK;
 
                PrintBinary(result);
                cout<<" 1+1=1 (with transfer 1) and transfer 1";
            }
            else if (!((x|y)&MASK))  //Если оба бита нулевые
            {
                result|=MASK;
                transfer=false;
 
                PrintBinary(result);
                cout<<" 0+0=1 (with transfer 1)";
            }
            else  //Если один из битов единица
            {
                PrintBinary(result);
                cout<<' '<<(bool)(x&MASK)<<'+'<<(bool)(y&MASK)<<"=0 (with transfer 1) and transfer 1";
            }
        }
        MASK<<=1;  //сдвигаем маску для просмотра следующего бита
    }
    cout<<"\nResult value: \t";
    PrintBinary(result);
}
 
int main()
{
    unsigned x, y;
 
    cout<<"Input first unsigned char: ";
    cin>>x;
    if (x>sizeof(unsigned char)*255) {cout<<"Incorrect input\n"; return 1;}
    cout<<"Input second unsigned char: ";
    cin>>y;
    if (y>sizeof(unsigned char)*255) {cout<<"Incorrect input\n"; return 1;}
 
    cout<<"First value as binary: \t";
    PrintBinary(x);
    cout<<"\nSecond value as binary:\t";
    PrintBinary(y);
 
    cout<<"\n\nDemonstration of adding first and second values:";
    AddBinary(x, y);
    cout<<'\n';
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 18:42     Исправить программку. Побитовые операции
Посмотрите здесь:

C++ Побитовые операции
C++ Побитовые операции!
Побитовые операции C++
C++ Побитовые операции
Побитовые операции C++
C++ Побитовые операции
C++ Побитовые операции
C++ Побитовые операции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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