Отключить пятые и шестые биты байта, использую операций И и НЕ

118
28 апреля 2019, 18:00
#include <iostream>
int main()
{
    unsigned int flags = 482;
    unsigned int masks[2]={5,6};
    std::cout << flags << std::endl;
    std::cout << "Before:";
    for (int i = 128; i > 0; i = i / 2)
    {
        if (flags&i)
        {
            std::cout << "1";
        }
        else
        {
            std::cout << "0";
        }
    }
    std::cout << std::endl;
    for (int i = 0; i < 2; ++i)
    {
        flags &= ~masks[i];
    }
    std::cout << flags << std::endl;
    std::cout << "After:";
    for (int i = 128; i > 0; i = i / 2)
    {
        if (flags&i)
        {
            std::cout << "1";
        }
        else
        {
            std::cout << "0";
        }
    }
    std::cout << std::endl;
    std::cin.get();
}

Работает как-то не так... 482 Before:11100010 480 After:11100000

Answer 1

Это позиции битов: unsigned int masks[2]={5,6};

А здесь эти числа используются напрямую flags &= ~masks[i];

int mask = 0;
for (int i = 0; i < 2; ++i)
   {
       flags &= ~(1 << masks[i]);
   }
Answer 2

Все, что вам нужно - построить маску 10011111. Или делайте ее руками

unsigned char mask = 159;

или вычислите:

unsigned char mask = 3;
mask = ~(mask << 5);

Дальше для сброса 5 и 6 бита с байте byte делаете

byte &= mask;
READ ALSO
(C++) Как заблокировать перемещение мыши?

(C++) Как заблокировать перемещение мыши?

делаю внутри игровое меню и столкнулся с проблемой, как заблокировать мышь?

117
GNU Make C++. Linux

GNU Make C++. Linux

Возможно, не совсем понимая что искать, не могу найти действующего примераПроект на C++, разбит на подпапки(src:Engine{Component, Utils}, Process{Objects,

165
Сложение volatile - UB?

Сложение volatile - UB?

Содержит ли следующая программа UB?

128
Python. char как в С/С++

Python. char как в С/С++

в с++ машина видит char как целочисленный тип и можно просто брать и делать так:

146