Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Побитовое сравнение

#c_sharp #битовые_операции


Объясните пожалуйста на пальцах. У меня есть маска в двоичном представлении 0000
0100, я хочу во время когда пользователь вводит число, например : 4 что в двоичном
равно маске, получать true, во всех остальных случаях false. Делаю вот так :  

public static bool isTrue(byte num)
{
    byte result = (byte)(num & MASK_DAY); //Константа = 0x04;

    if(result == 0)
    {
        return false;
    }

    return true;
}  


В этом случае я получаю всегда true когда бит другого числа, 2 разряда, равен 1,
а как мне сделать что бы я получал true только тогда когда 2-е разряды обоих чисел
совпадают, а все остальное равно 0? Или я не правильно понимаю работу с битами?
    


Ответы

Ответ 1



Битовые маски применяются для того, чтобы проверить в числе только интересующие нас биты. А на остальные не обращать внимания. Например: проверка, что в числе установлены те биты, которые установлены в MASK_DAY. Значение остальных бит нас не интересует if (num & MASK_DAY == MASK_DAY) в числе не установлены те биты, которые установлены в MASK_DAY if (num & MASK_DAY == 0) проверка, что все не установленные биты MASK_DAY сброшены и в num if (num | MASK_DAY == MASK_DAY) проверка, что все установленные биты MASK_DAY установлены и в num, а не установленные - сброшены if (num == MASK_DAY)

Ответ 2



Повторять уже написанное не буду, но некоторые уточнения внесу. 1. Битовые (поразрядные) операции в качестве результата возвращают число. это означает, что если вы, например, выполнили операцию byte res = 0x04 & 0x0f 00000100 //0x04 &&&&&&&& 00001111 //0x0f ======== 00000100 //0x04 то переменная res будет содержать 0x04 2. В C# в условном операторе if допустимы только логические выражения Это означает, что мы не можем использовать результат поразрядной операции (число) в качестве условия для if, поэтому нам необходимо использовать логическую (результат типа bool [true/false]) операцию сравнения == для проверки, что после применения поразрядной операции получилось нужное число. В большинстве случаев достаточно простых логических операций сравнения. Битовые операции имеет смысл использовать тогда, и только тогда, когда вас интересует состояние конкретных бит в числе, например в случае упаковки нескольких логических переменных в одно число с целью экстремальной экономии памяти.

Комментариев нет:

Отправить комментарий