Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 22.01.2019
Сообщений: 57
1

Работа с побитовыми операторами и масками

04.04.2019, 20:42. Просмотров 309. Ответов 1
Метки нет (Все метки)


есть программа, она заменяет в шестнадцатеричном числе все нечетные цифры нулями. при написании кода были добавлены маски, собственно в этом и вопрос - как работают эти маски, да и вообще не совсем понятно, как тут что работает, кому не сложно, объясните пожалуйста, а то препод ворчит и не хочет тратить время на объяснения, а в инете толком не нашел
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
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"RUS");
    unsigned n, m, mask1;
    int i, j, l;
    cout << "введите n в шестнадцатеричной" << endl;
    cin >> hex >> n;
    cout<< sizeof(n)<<endl;
    for (i = 0; i < sizeof(n) * 2; i++)
    {
        m = n << (32 - (1 + 4 * i));
        if (m >> (32 - 1) == 1)
        {
            mask1 = n << (32 - 4 * (i + 1));
            mask1 = mask1 >> 28;
            mask1 = mask1 << 32 - 4 * (8 - i);
            n = n ^ mask1;
        }
    }
    cout << "Новое n = " << hex << n << endl;
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2019, 20:42
Ответы с готовыми решениями:

Операции с побитовыми операторами (число 8 битов и число 9 битов)
Доброго времени суток всем ! Прошу ответа на несложный вопрос (...по крайней мере мне так...

Работа с побитовыми операциями
помогите с задачкой.. Дан массив чисел. Определить сумму тех элементов массива, двоичные коды...

Массивы. Работа с побитовыми операциями
Помогите с программированием,пожалуйста!!!!!!!!!!!! Дан массив из беззнаковых чисел. Коды четных...

Работа с операторами(+,-) в С++
Доброго времени суток, имеются 2 вектора типа int, например: vector&lt;int&gt; v1 {1,2,3,4};...

1
64 / 30 / 18
Регистрация: 16.03.2019
Сообщений: 84
04.04.2019, 22:12 2
Здравствуйте.
Зачем же так сложно маски формировать ?
Накидал вариант попроще, с комментариями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"RUS");
    unsigned n;
    cout << "введите n в шестнадцатеричной" << endl;
    cin >> hex >> n;
    cout<< "Размер n = " << sizeof(n)<<" байт"<<endl;
    unsigned int NDigits = sizeof(n)*2; // Кол-во шетнадцатеричных цифр в переменной данного типа
    for (unsigned int i = 0, shift=0; i < NDigits; i++)
    {
        shift = i*4; // считаем величину сдвига, на который будем двигать исходные маски 0x1 и 0xF (беззнаковые)
        if (n & (0x1U << shift)) // цифра нечетная (младший из 4-х бит == 1)
            n = n & (~(0xFU << shift)); // делаем маску вида ...FFFFFF0FF... и выполняем операцию & маски и числа n
    }
    cout << "Новое n = " << hex << n << endl;
    system("pause");
}
Почитайте про битовые операции C++, думаю, что разберетесь.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2019, 22:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Работа с операторами....
Определить операторы, которые позволяют записывать выражения, заданные в соответствии с вариантом....

работа с операторами while и do-while
Есть такая проблема: написал код с помощью оператора do-while: { float x, a, s=0; int f, i, k=1;...

Работа с операторами
Как многие идущие к своей цели програмисты я встретился с таким делом как операторы. Вот для...

работа с логическими операторами
public class myclass { public static void main(String args) { int b1 = 0xe; //14 or...


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

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

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