Объясните пожалуйста на пальцах. У меня есть маска в двоичном представлении 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? Или я не правильно понимаю работу с битами?
Битовые маски применяются для того, чтобы проверить в числе только интересующие нас биты. А на остальные не обращать внимания.
Например:
проверка, что в числе установлены те биты, которые установлены в 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)
Повторять уже написанное не буду, но некоторые уточнения внесу.
1. Битовые (поразрядные) операции в качестве результата возвращают число.
это означает, что если вы, например, выполнили операцию
byte res = 0x04 & 0x0f
00000100 //0x04
&&&&&&&&
00001111 //0x0f
========
00000100 //0x04
то переменная res будет содержать 0x04
2. В C# в условном операторе if
допустимы только логические выражения
Это означает, что мы не можем использовать результат поразрядной операции (число) в качестве условия для if
, поэтому нам необходимо использовать логическую (результат типа bool [true/false]) операцию сравнения ==
для проверки, что после применения поразрядной операции получилось нужное число.
В большинстве случаев достаточно простых логических операций сравнения. Битовые операции имеет смысл использовать тогда, и только тогда, когда вас интересует состояние конкретных бит в числе, например в случае упаковки нескольких логических переменных в одно число с целью экстремальной экономии памяти.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Не могу разобраться как добавить мьютекс,в форме есть 6 pictureBox-ов, каждые t секунды меняет цвет первой части, в ответ на изменение цвета в первой...
Слышал что не рекомендуется использовать оператор new где попалоЕго необходимо изолировать в отдельном классе который будет отвечать за создания...
Возможно ли сделать свойство-расширение для класса? Например у меня есть такой метод-расширение: