В отличие от логических выражений (&& || !=) в побитовых операторах (& | ~) не работает принцип ленивых вычислений (т.е. если при вычислении части выражения ответ уже и так понятен, то остальная часть выражения не вычисляется), абсолютно все вычисления будут проделаны.
Это выражение вызовет NullPointerException.
try{if(c !=null& c.getName()!=null){}}catch(NullPointerException e){
c =newC();
c.setName("C");}
//result - это массив с настройками, для работы с битовой маскойboolean a =false;boolean b =true;boolean c =false;boolean d =false;int result =0;if(a) result +=1;//1 == 2 в степени 0 — нулевой битif(b) result +=2;//2 == 2 в степени 1 — первый битif(c) result +=4;//4 == 2 в степени 2 — второй битif(d) result +=8;//8 == 2 в степени 3 — третий битSystem.out.println(result);// Итого получается число 2 == 0010// output: 2
Установка ВКЛ (т.е. 1) 6го бита (отсчет от 0го) числа 2:
System.out.println(result |=1<<6);// сравнение и сразу же присвоение результата переменной result// 1 << 6 == 1000000// or// 2 == 0000010// result == 1000010 т.е. 66// output: 66
Установка ВЫКЛ (т.е. 0) 6го бита (отсчет от 0го) числа 66:
System.out.println(result &=~(1<<6));//1 << 6 == 1000000// сравнение и сразу же присвоение результата переменной result// ~(1 << 6) == 0111111// and// 66 == 1000010// result == 0000010 т.е. 2// output: 2
Проверка, ВКЛ ли (т.е. равен 1) 6 бит числа result:
System.out.println(result &1<<6);// Если 0 - то нет, если 1 то равен// output: 0