Операторы присваивания и сравнения:
Во-первых, конечно же, различаются оператор присваивания = и оператор сравнения ==.
х = 1; // присваиваем переменной х значение 1
х == 1 // сравниваем значение переменной х с единицей
Оператор сравнения всегда возвращает булевское значение true или false.
Оператор присваивания возвращает значение правого операнда.
// пример вызовет ошибку компилятора
if (х=0) { // здесь должен применятся оператор сравнения ==
В Java легко устраняется. Поскольку выражение х=0 имеет числовое значение 0, а не булевское (и тем более не воспринимается как всегда истинное), то компилятор сообщает об ошибке (необходимо писать х==0). Условие "не равно" записывается как !=.
Логические операторы:
Логические операторы "и" и "или" (& и |) можно использовать в двух вариантах.
Первый вариант операторов (&, |) всегда вычисляет оба операнда, второй же - ( &&, 11 ) не будет продолжать вычисления, если значение выражения уже очевидно. Например:
int x=1;
(х>0) | calculate(x) // в таком выражении произойдет вызов calulate (х>0)
11 calculate(x) // а в этом – нет.
Опиратор "не":
Логический оператор отрицания "не" записывается как ! и, конечно, имеет только один вариант использования. Этот оператор меняет булевское значение на противоположное.
int x=1;
х>0 // выражение истинно
!(х>0) // выражение ложно
Оператор <<
При сдвиге влево оператором << все биты числа смещаются на указанное количество позиций влево, причем освободившиеся справа позиции заполняются нулями. Эта операция аналогична умножению на 2п и действует вполне предсказуемо, как при положительных, так и при отрицательных аргументах.