Вы здесь: Главная >> Java-учебник >> Операторы отношения и логические операторы
Операторы отношения и логические операторы в языке Java
Язык Java содержит полный комплект операторов отношения. Чтобы проверить равенство, следует использовать символы = =. Например, значение выражения 3 = = 7 равно false.
Для проверки неравенства используются символы ! = .
Так, значение выражения 3 != 7 равно true.
Кроме того, в языке Java есть обычные операторы < (меньше), > (больше), <= (меньше или равно) и => (больше или равно).
Java, как и язык C++, использует символы для обозначения логического оператора "и", а также символы | | для обозначения логического оператора "или" . Как обычно, знак восклицания означает логический оператор отрицания . Операторы && и | | вычисляются по сокращенной схеме, т.е. если в ходе вычисления выражения А && В выясняется, что подвыражение А ложно, то подвыражение В не вычисляется.
Например, в выражении
х != 0 && 1/х > х+у // Не делить на 0.
вторая часть никогда не вычисляется, если значение переменной х равно нулю.
Таким образом, подвыражение 1/х не вычисляется, если х равно нулю и деления на нуль не происходит.
Аналогично, если оказывается, что выражение А истинно, то значение выражения А | | В автоматически становится истинным, и вычислять выражение В нет необходимости.
В языке Java есть также тернарный оператор ? :, который иногда оказывается полезным. Выражение
условие ? e1 : е2
означает, что если условие истинно, то вычисляется выражение e1, а если ложно — е2.
Например, выражение
х < у ? х : у
вычисляет меньшее из чисел х и y.
Побитовые операторы
Работая с любыми целочисленными типами, можно применять операторы, имеющие дело непосредственно с битами, из которых состоят целые числа. Это значит, что для получения отдельных битов числа можно использовать технику масок.
В языке Java есть следующие побитовые операторы:
S ("и") | {"или") ^ ("исключающее или") ~("не")
Эти операторы работают с битами. Например, если n — это целое число, то выражение
int fourthBitFromRight = (n & 8) /8;
равно единице, если четвертый бит справа в двоичном представлении числа n равен единице, и нуль, если нет.
Используя оператор & с соответствующей степенью двойки, можно замаскировать все биты, кроме одного.
Операторы & и | применяются к булевским переменным и вычисляют булевские значения.
Эти операторы аналогичны операторам && и | |, за исключением того, что побитовые операторы не вычисляются по сокращенной схеме, т.е. перед вычислением результата вычисляются оба аргумента.
В языке Java есть также операторы >> и <<, сдвигающие битовое представление числа вправо или влево. Эти операторы часто оказываются удобными, если нужно построить битовое представление на основе маски: int fourthBitFromRight = (n s (1 « 3)) » 3;
В языке есть даже оператор >>>, заполняющий старшие разряды нулями, в то время как оператор » приписывает знаковый бит к старшим разрядам.
Оператора <« в языке Java нет.
Аргумент, стоящий в правой части операторов побитового сдвига, сокращается по модулю 32 (если левая часть является числом типа long, правая часть сокращается по модулю 64).
Например, значение выражения 1«35 эквивалентно выражению 1 <<3, или 8.
В языках C/C++ не фиксируется, какой сдвиг выполняет оператор >> : арифметический (вплоть до знакового бита) или логический (заполняя свободные разряды нулями).
Разработчики средств реализации языка могут выбрать тот вариант, который покажется им более эффективным. Это значит, что оператор >> в языке C/C++ в действительности лишь определяет некое неотрицательное число.
Язык Java снимает эту неопределенность.
Сергей Владимирцев
28.01.2011