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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию для вычисления выражения http://www.cyberforum.ru/cpp-beginners/thread1004684.html
Написать функцию для вычисления выражения (см.вложения) , a.
C++ Матрица. Переставляя ее строки и столбцы . добится того , чтобы наибольший элемент оказался в верхнем левом углу дана вещественная матрица А размером (8х5) . Переставляя ее строки и столбцы . добится того , чтобы наибольший элемент оказался в верхнем левом углу. Хелпп плиз..< http://www.cyberforum.ru/cpp-beginners/thread1004668.html
Алгоритм сортировки одномерного массива слияние C++
Добрый вечер. Нужна помощь в написании программы. Буду благодарен,если знающие люди,помогут мне. Вот такое задание: "Запрограммировать алгоритм сортировки одномерного массива слиянием. Подсчитать количество сравнений; Определить массив из элементов {1,2,3,...,N},сортировка которого требует наибольшего количества сравнений. "
Поменять местами макс и мин элементы с++ C++
Здравствуйте,я недавно начал пытаться программировать на этом языке, Задание следующее: в матрице необходимо найти максимальный и минимальный элемент по строкам, и поменять их между собой...( например, массив 1 2 3 4, 6 7 8 9 в 1 строке мин=1...
C++ Наибольшая цифра числа http://www.cyberforum.ru/cpp-beginners/thread1004651.html
Помогите пожалуйста, надо решить задачу: Пользователь вводит число, а программа вычёркивает из этого числа самую большую цифру и выводит число без неё. ПОжалуйста:)
C++ Основы Объектно-ориентированного программирования Нужна помощь в написании программы. Задание:"Дата задается в формате число/месяц/год. Реализовать (с учетом високосных годов): а) Вычитание из даты определенного пользователем количества днейж б)Определение количества дней между двумя датами." Буду благодарен,если поможете. подробнее

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

Задача - Сложить 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");
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru