class Bitwise {
public static void main (String[] args) {
int fs = 53; //В двоичном виде 00110101
System.out.println("Флаг 1: "+(( (fs&1 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 2: "+(( (fs&2 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 3: "+(( (fs&4 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 4: "+(( (fs&8 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 5: "+(( (fs&16 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 6: "+(( (fs&32 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 7: "+(( (fs&64 > 0) ? "ВКЛ" : "выкл")));
System.out.println("Флаг 8: "+(( (fs&128 > 0) ? "ВКЛ" : "выкл")));
}
}
Вот пример из книги которую читаю и совершенно не понимаю вот этого (fs&1 > 0)
и аналогичных далее выражений.
Программа не компилируется...
А в примере в ответе книги такой ответ должно получиться:
Флаг 1: ВКЛ
Флаг 2: выкл
Флаг 3: ВКЛ
Флаг 4: выкл
Флаг 7: выкл
Флаг 8: выкл
Флаг 5: ВКЛ
Флаг 6: ВЫКЛ
Вот так правильно.
System.out.println("Флаг 1: " + ((fs & 1) > 0 ? "ВКЛ" : "выкл"));
У оператора '>' приоритет больше, поэтому получалось 53 & (1 > 0)
, потому и не компилировалось. Изучите приоритет операторов, чтобы не повторять эту ошибку.
Еще я убрал лишние скобки.
Насчет побитовых операций: выражение с побитовым И как раз применяется для проверки определенного бита или битовой маски. Оно оставляет в числе только те его биты, которые равны 1 в маске. Степени двойки как раз имеют только один бит равный 1, поэтому такая запись проверит ровно один бит числа, разряд которого соответствует степени двойки.
Чтобы установить биты числа, используют ИЛИ:
flags |= mask;
Для сброса битов делают так:
flags &= ~mask;
Это инверсия маски и сброс в 0 всех битов которые равны 0 в инвертированной маске (1 в обычной).
Вместо числа может быть выражение вида 1 << 5
. Это сдвиг влево на 5 бит, он даст нам 32.
(fs&1 > 0) 53 - переводится в двоичное.110101. 1 переводится в двоичное - 1. Далее выполняется побитовое И. Результат - 110101 > 0 - поэтому true - ВКЛ
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Задача: реализовать фрагмент, который позволяет вернуть в место (во фрагмент), откуда этот фрагмент вызван, выбранную пользователем дату