Основы программирования на Java - С. Сухов
Шрифт:
Интервал:
Закладка:
System.out.print("b = " + b);
System.out.print("c = " + c);
System.out.print("d = " + d);
System.out.println("e =” + e);
}
}
Исполнив эту программу, вы должны получить приведенный ниже результат:
a = 2
b = 6
c = 1
d = 4
e = -4
4.1.1. Оператор деления по модулюОператор деления по модулю - оператор mod, обозначается символом %. Этот оператор возвращает остаток от деления первого операнда на второй. Функция mod в Java работает не только с целыми, но и с вещественными типами. Приведенная ниже программа иллюстрирует работу этого оператора.
class Modulus {
public static void main (String args []) {
int x = 42;
double у = 42.3;
System.out.print("x mod 10 = " + x % 10);
System.out.println("y mod 10 = " + у % 10);
}
}
Выполнив эту программу, вы получите следующий результат:
х mod 10 = 2 у mod 10 = 2.3
4.1.2. Арифметические операторы присваиванияДля каждого из арифметических операторов есть форма, в которой одновременно с заданной операцией выполняется присваивание. Если требуется написать а += 4, то с таким же успехом можно использовать а = а +4.
Такой способ пригоден для всех бинарных операторов, которые используются в выражениях вида:
переменная = переменная оператор выражение;
Любой такой оператор можно записать в короткой форме:
переменная оператор = выражение;
4.1.3. Инкремент и декрементВ Java существует два оператора, называемых операторами инкремента и декремента (++ и --) и являющихся сокращенным вариантом записи для сложения или вычитания из операнда единицы. Эти операторы уникальны в том плане, что могут использоваться как в префиксной, так и в постфиксной форме. При использовании префиксной формы операнд модифицируется перед выполнением операции. В постфиксной форме сначала используется содержимое операнда, а лишь после этого операнд инкрементируется или декрементируется. Следующий пример иллюстрирует использование операторов инкремента и декремента.
class IncDec {
public static void main(String args[]){
int a = 1;
int b = 2;
int с = ++b;
int d = a++;
c++;
System.out.print("a = " + a);
System.out.print("b = " + b);
System.out.print("c = " + c);
System.out.println("d = " + d);
}
}
Результат выполнения данной программы будет таким:
a=2b=3c=4d=1
4.2. Целочисленные битовые операторыДля целых числовых типов данных — long, int, short, char и byte - определен дополнительный набор операторов, с помощью которых можно проверять и модифицировать состояние отдельных битов соответствующих значений. В таблице 4.2 приведена сводка таких операторов. Операторы битовой арифметики работают с каждым битом как с самостоятельной величиной.
Таблица 4.2. Операторы битовой арифметики№
Оператор
Результат
№
Оператор
Результат
1
&
побитовое И (AND)
8
&=
Побитовое И (AND) с присваиванием
2
1
побитовое ИЛИ (OR)
9
|=
побитовое ИЛИ (OR) с присваиванием
3
^
побитовое исключающее ИЛИ (XOR)
10
^=
побитовое исключающее ИЛИ (XOR) с присваиванием
4
>>
сдвиг вправо
11
>>=
сдвиг вправо с присваиванием
5
>>>
сдвиг вправо с заполнением нулями
12
>>>=
сдвиг вправо с заполнением нулями с присваиванием
6
<<
сдвиг влево
13
<<=
сдвиг влево с присваиванием
7
~
побитовое унарное отрицание (NOT)
В таблице 4.3 показано, как каждый из операторов битовой арифметики воздействует на возможные комбинации битов своих операндов.
Таблица 4.3
А
В
OR
AND
XOR
NOT А
0
0
0
0
0
1
1
0
1
0
1
0
0
1
1
0
1
1
1
1
1
1
0
0
Сдвиг влево
Оператор << выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями.
Сдвиг вправо
Оператор >> означает в языке Java сдвиг вправо. Он перемещает все биты своего левого операнда вправо на число позиций, заданное правым операндом. Когда биты левого операнда выдвигаются за самую правую позицию слова, они теряются. При сдвиге вправо освобождающиеся старшие (левые) разряды сдвигаемого числа заполняются предыдущим содержимым знакового разряда. Сделано это для того, чтобы при сдвиге вправо числа сохраняли свой знак.
Беззнаковый сдвиг вправо
Часто требуется, чтобы при сдвиге вправо расширение знакового разряда не происходило, а освобождающиеся левые разряды заполнялись бы нулями. С этой целью используется оператор беззнакового сдвига вправо >>>.
4.3. Операторы отношенийДля того чтобы можно было сравнивать два значения, в Java имеется набор операторов, описывающих отношение и равенство. Список таких операторов приведен в таблице 4.4.
Таблица 4.4
№
Оператор
Результат
1
= =
равно
2
!=
не равно
3
>
больше
4
<
меньше
5
>=
больше или равно
6
<=
меньше или равно
Значения любых типов, включая целые и вещественные числа, символы, логические значения и ссылки, можно сравнивать, используя оператор проверки на равенство == и неравенство !=. Обратите внимание — в языке Java проверка на равенство обозначается последовательностью (==). Один знак (=) — это оператор присваивания.
Операторы отношения могут применяться только к операндам числовых типов. С их помощью можно работать с целыми, вещественными и символьными типами. Каждый из операторов отношения возвращает результат типа boolean, т.е. либо true, либо false.
4.4. Булевы логические операторыБулевы логические операторы, перечень которых приведен в таблице 4.5, оперируют только с операндами типа boolean. Все бинарные логические операторы воспринимают в качестве операндов два значения типа boolean и возвращают результат того же типа.
Таблица 4.5. Таблица булевых логических операторов
№
Оператор
Результат
№
Оператор
Результат
1
&
логическое И (AND)
7
&=
И (AND) с присваиванием
2
|
логическое ИЛИ (OR)
8
=
ИЛИ (OR) с присваиванием
3
^
логическое исключающее ИЛИ (XOR)
9
^=
исключающее ИЛИ (XOR) с присваиванием
4
||
оператор OR быстрой оценки выражений (short circuit OR)
10
==
равно
5
&&
оператор AND быстрой оценки выражений (short circuit AND)
11
!=
не равно
6
!
логическое унарное отрицание (NOT)
12
? :
тернарный оператор if-then-else
Логические булевы операторы AND (И), OR (ИЛИ) и XOR (исключающее ИЛИ) выполняют над логическими величинами те же операции, что и их аналоги из семейства битовой логики. Унарный оператор NOT (НЕ) инвертирует логическое значение. В таблице 4.6 показаны результаты воздействия логических операторов на различные комбинации значений операндов.
Таблица 4.6
A
В
OR
AND
XOR
NOT A
false
false
false
false
false
true
true
false
true
false
true