Java - Операторы

Арифметические операции

Рассмотрим 12-ть арифметических операций сразу в виде кода -
для понимания результатов очень полезным оказывается предыдущая наша заметка о повышении типа
в выражениях.
Итак, операции:

int a = 5, b = 4, c; // целые 
float z = 1; // дробное значение

// будем считать, что каждая из последующих строк 
//  является первой после объявления переменной - и 
// предыдущих операций над теми же самыми переменными
// не производилось

c = a + b; //(1) = 9 (умножение)

c = a - b; //(2) = 1 (вычитание = разность)

c = a * b; //(3) = 20 (произведение)

z = z * a / b; //(4) = 1.25 (обычное деление) 

b = b % a; //(5) = 4 (деление по модулю = получение остатка от деления) 

b++; // (6) = 5 (икремент)

b--; // (7) = 3 (декремент)

//  Далее так называемые "составные арифметические операторы" -
// то есть такие где арифметическая операция совмещена с операцией присваивания 

b += a; // (8) = 9 (сложение с присваиванием)

b -= a; // (9) = -1 (вычитание с присваиванием)

b *= a; // (10) = 20 (вычитание с присваиванием)

b /= a; // (11) = 0 (деление с присваиванием) 
z /= a; // (11) = 0.2 (деление с присваиванием) 

b %= a; //(12) = 4 (деление по модулю с присваиванием)

Примечания:

  1. мы получаем ноль в 11-ой операции (первый пример для деления) в силу неявного преобразования типа
  2. следует помнить, что операндами арифметических операций могут быть исключительно переменные числового типа и также символьный тип char, который в Яве является разновидностью типа int (целочисленным типом).

Префиксная и постфиксная форма инкремента и декремента

Инкремент и декримент в природе существуют в двух формах -
давайте просто изучим такой "код":

int a = 5, b = 4;

// (постфикс) сначала произойдёт присваивание, 
// а только потом наращивание переменной b
a = b++; // a == 4  b == 5

// (префикс) сначала произойдёт наращивание b, 
//  а затем присваивание этого значения переменной 'a' 
a = ++b; // a == 5  b == 5

// но если унарный оператор применён "сам по себе" -
// то префиксная форма ничем приципиально
// от постфиксной не отличается: 
a++; // == 6 
++a; // == 6

Побитовые операторы

Java представляет также удобные средства - ряд "общепринятых" операций для обитовой обработки операндов
(то есть такой при которой данные рассматриваются именно как число в двоичной форме).

Важно о представлении целых чисел в Java.

// Сдвиг числа вправо на два знака:
int a = 32; // ==32
 a = a >> 2; // ==8
//1 0 0 0 0 0   |
//_ _ 1 0 0 0    | 00

мы поговорим об этих операциях позже -
а пока что перейдём к операторам сравнения.

Операторы сравнения

/*Два оператора сравнения применимы к любым типам:*/
==   // равно
!=   // не равно 

 //Далее 4=ре оператора упорядочивания
//которые применимы только к числовым типам
//(целые, char и числа с плавающей точкой)
>    // больше
<    // меньше
>=   // больше либо равно
<=   // меньше либо равно

//Результат оператора сравнения 
//представляет собой результат логического типа: 
int a = 5, b = 4, c = 5;
boolean f = b > a; // ==false
boolean t = a == c; // ==true

Чаще всего эти операторы используются совместно с управляющим оператором if и в заголовках (операторах) циклов разных видов,
но выше мы видели и "лихой" пример присваивания значения переменной логического типа без всякого там цикла или условного оператора.

Логические операторы

Пожалуй, единственным "не всем известным" по смыслу является оператор "исключающего ИЛИ":

boolean  a = true, b = false; 
//(1) И  (AND)
a = a & b; // == false

//(2) ИЛИ (OR)
a = a | b; // == true

//(3) исключающее ИЛИ (XOR)  = сложение по модулю 2:
a = a ^ b; // == true

//(4) Сокращённое И:
a = a && b; // == false

//(5) Сокращённое ИЛИ:
a = a || b; // == true

//(6) НЕ (унарный оператор):
a = !a; // == false;

//(7) И с присваиваниме:
a &= b; // == false;

//(8) ИЛИ с присваиванием:
a |= b; // == true;

//(9) XOR с присваиванием:
a ^= b; // == true;

// (10) троичный условный оператор:
b = a ? false : true; // == false получим значение обратное 'a'  
// последнее также в данной ситуации эквивалентно:
b = !a; // == false
 

Key Words for FKN + antitotal forum (CS VSU):