Язык 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 снимает эту неопределенность.
|