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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Suomalainen
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 10
#1

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

11.11.2013, 18:42. Просмотров 210. Ответов 0
Метки нет (Все метки)

Добрые люди, выручайте. Понимаю, что нагло, но другого выхода нет

Задача - Сложить 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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исправить программку. Побитовые операции (C++):

Побитовые операции - C++
Всем доброго утра. Дана такая задача: есть два чсила,поменять местами 2 последние цифры этих чисел между собой, т.е. 2 последних Х заменить...

Побитовые операции - C++
Задача: битовый образ 8*8 задается при помощи 8 байт, каждый байт состоит, соответственно, из 8 бит, бит={0,1}; при помощи побитовых...

Побитовые операции - C++
Здравствуйте уважаемые читатели форума! СОвсем не представляю как сделать простейшую програмку на С++. Нужно вычислить номер позиции...

Побитовые операции - C++
1-программа #include &lt;stdio.h&gt; #include &lt;windows.h&gt; int main(void) { char g; /* ??? ????????? */ char s; /* ??????? ?????? */ ...

Побитовые операции на с++ (<< и >>) - C++
Подскажите пожалуйста, такая задача - побитовый сдвиг на заданное количество символов сдвигает только цифры, как сделать чтобы он то же...

Побитовые операции - C++
От друга услышал идею о побитовой сортировки имен (например). К примеру, если у нас набор структурных переменных с анкетами работников, и...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 18:42
Привет! Вот еще темы с ответами:

Побитовые операции - C++
Задание: Дано целое неотрицательное число. Определить количество составляющих его шестнадцатеричных цифр, содержащих в двоичном...

Побитовые операции - C++
Задача должна быть реализована в с++ но пришлось временно писать в дельфи. суть такая: входящие число в диапазоне 0-n (8 байт) выходящие...

Побитовые операции - C++
Пожалуйста, объясните как работают побитовые операторы &amp; и |. Например идет: i=03; j=01; k=i &amp; j; // k=1 k=i | j; // k=3 А почему...

Побитовые операции в С++ - C++
Здраствуйте. Нужно написать программу которая будед считывать количество единичек (1) в побитовом представлении числа. Пример input: 15 ...


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

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

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