Мегаобучалка Главная | О нас | Обратная связь


Основные операторы Java



2018-07-06 400 Обсуждений (0)
Основные операторы Java 0.00 из 5.00 0 оценок




 

Все операторы Java можно разделить на четыре группы: арифметические, логиче­ские, побитовые и сравнения. Рассмотрим последовательно каждую группу опе­раторов. Начнем с арифметических. Эти операторы перечислены в табл. 1.2

 

Таблица 1.2. Арифметические операторы Java

 

Оператор Название Пояснение
+ Сложение Бинарный оператор. Результатом команды a+b являет­ся сумма значений переменных a и b
- Вычитание Бинарный оператор. Результатом команды a-b являет­ся разность значений переменных a и b
* Умножение Бинарный оператор. Результатом команды a*b являет­ся произведение значений переменных a и b
/ Деление Бинарный оператор. Результатом команды a/b являет­ся частное от деления значений переменных a и b. Для целочисленных операндов по умолчанию выполняется деление нацело
% Остаток Бинарный оператор. Результатом команды a%b яв­ляется остаток от целочисленного деления значений переменных a и b
+= Сложение (упро­щенная форма с присваиванием) Упрощенная форма оператора сложения с присваива­нием. Команда a+=b является эквивалентом команды a=a+b
-= Вычитание (упро­щенная форма с присваиванием) Упрощенная форма оператора вычитания с присваива­нием. Команда a-=b является эквивалентом команды a=a-b
*= Умножение (упро­щенная форма с присваиванием) Упрощенная форма оператора умножения с присваи­ванием. Команда a*=b является эквивалентом команды a=a*b
/= Деление (упро­щенная форма с присваиванием) Упрощенная форма оператора деления с присваива­нием. Команда a/=b является эквивалентом команды a=a/b
%= Остаток (упро­щенная форма) Упрощенная форма оператора вычисления остатка с присваиванием. Команда a%=b является эквивален­том команды a=a%b
++ Инкремент Унарный оператор. Команда a++ (или ++a) является эквивалентом команды a=a+1
-- Декремент Унарный оператор. Команда a-- (или --a) является эквивалентом команды a=a-1

 

Эти операторы имеют некоторые особенности. В первую очередь обращаем вни­мание на оператор деления /. Если операндами являются целые числа, в ка­честве значения возвращается результат целочисленного деления. Рассмотрим последовательность команд:

int a=5,b=2; double x=a/b;

В данном примере переменная x получает значение 2.0, а не 2.5, как можно было бы ожидать. Дело в том, что сначала вычисляется выражение a/b. Поскольку операнды целочисленные, выполняется целочисленное деление. И только по­сле этого полученное значение преобразуется к формату double и присваивается переменной x.

Для того чтобы при целочисленных операндах выполнялось обычное деление, перед выражением с оператором деления указывается в круглых скобках иден­тификатор типа double (или float). Например, так:

int a=5,b=2;

double x=(double)a/b;

Теперь значение переменной x равно 2.5.

В Java, как и в С++, есть группа упрощенных арифметических операторов с присваиванием. Если op — один из операторов сложения, умножения, деления и вычисления остатка, то упрощенная форма этого оператора с присваиванием имеет вид op=. Это тоже бинарный оператор, как и оператор op, а команда вида x op=y является эквивалентом команды x=x op y.

Еще два исключительно полезных унарных оператора — операторы инкремента (++) и декремента (--). Действие оператора декремента сводится к увеличению на единицу значения операнда, а оператор декремента на единицу уменьшает операнд. Другими словами, команда x++ эквивалентна команде x=x+1, а команда x-- эквивалентна команде x=x-1. У операторов инкремента и декремента есть не только представленная здесь постфиксная форма (оператор следует после опе­ранда: x++ или x--), но и префиксная (оператор располагается перед операндом: ++x или --x). С точки зрения действия на операнд нет разницы в том, префикс­ная или постфиксная формы оператора использованы. Однако если выражение с оператором инкремента или декремента является частью более сложного вы­ражения, различие в префиксной и постфиксной формах операторов инкремента и декремента существует. Если использована префиксная форма оператора, сна­чала изменяется значение операнда, а уже после этого вычисляется выражение. Если использована постфиксная форма оператора, сначала вычисляется выраже­ние, а затем изменяется значение операнда. Рассмотрим небольшой пример:

int n,m;

n=10;

m=n++;

В этом случае после выполнения команд переменная n будет иметь значение 11, а переменная m — значение 10. На момент выполнения команды m=n++ значение переменной n равно 10. Поскольку в команде m=n++ использована постфиксная форма оператора инкремента, то сначала выполняется присваивание значения переменной m, а после этого значение переменной n увеличивается на единицу.

Иной результат выполнения следующих команд:

int n,m;

n=10;

m=++n;

Обе переменные (n и m) в этом случае имеют значение 11. Поскольку в команде m=++n использована префиксная форма инкремента, сначала на единицу увели­чивается значение переменной n, а после этого значение переменной n присваи­вается переменной m.

Следующую группу образуют логические операторы. Операндами логических операторов являются переменные и литералы типа boolean. Логические опера­торы Java перечислены в табл. 1.3.

 

Таблица 1.3. Логические операторы Java

Оператор Название Пояснение
& Логическое И Бинарный оператор. Результатом операции A&B явля­ется true, если значения обоих операндов равны true. В противном случае возвращается значение false
&& Сокращенное логическое И Бинарный оператор. Особенность оператора, по срав­нению с оператором &, состоит в том, что если значе­ние первого операнда равно false, то значение второго операнда не проверяется
| Логическое ИЛИ Бинарный оператор. Результатом операции AIB являет­ся true, если значение хотя бы одного операнда равно true. В противном случае возвращается значение false
|| Сокращенное логическое ИЛИ Бинарный оператор. Особенность оператора, по срав­нению с оператором |, состоит в том, что если значе­ние первого операнда равно true, то значение второго операнда не проверяется
^ Исключающее ИЛИ Бинарный оператор. Результатом операции A^B являет­ся true, если значение одного и только одного опе­ранда равно true. В противном случае возвращается значение false
! Логическое отрицание Унарный оператор. Результатом команды !A является true, если значение операнда A равно false. Если зна­чение операнда A равно true, результатом команды !A является значение false

 

Логические операторы обычно используются в качестве условий в условных операторах и операторах цикла.

В табл. 1.4 перечислены операторы сравнения, используемые в Java.

Таблица 1.4. Операторы сравнения Java

 

Оператор Название Пояснение
= = Равно Результатом операции A= =B является значения true, если операнды A и B имеют одинаковые значения. В противном случае значением является false
Оператор Название Пояснение
< Меньше Результатом операции A<B является значения true, если значение операнда A меньше значения операнда B. В противном случае значением является false
<= Меньше или равно Результатом операции A<=B является значения true, если значение операнда A не больше значения операн­да B. В противном случае значением является false
> Больше Результатом операции A>B является значения true, если значение операнда A больше значения операнда B. В противном случае значением является false
>= Больше или равно Результатом операции A>=B является значения true, если значение операнда A не меньше значения опе­ранда B. В противном случае значением является false
! = Не равно Результатом операции A!=B является значения true, если операнды A и B имеют разные значения. В про­тивном случае значением является false

 

Операторы сравнения обычно используются совместно с логическими операто­рами.

Для понимания принципов работы поразрядных операторов необходимо иметь хотя бы элементарные познания о двоичном представлении чисел. Напомним читателю некоторые основные моменты.

В двоичном представлении позиционная запись числа содержит нули и еди­ницы.

Старший бит (самый первый слева) определяет знак числа. Для положитель­ных чисел старший бит равен нулю, для отрицательных — единице.

Перевод из двоичной системы счисления положительного числа с позицион­ной записью bnbn-1...b2b1b0 (bi могут принимать значения 0 или 1, старший бит для положительных чисел bn = 0) в десятичную выполняется так:

b020 + b121 + b222 +... + bn-12n-1 + bn2n .

Для перевода отрицательного двоичного числа в десятичное представление производится побитовое инвертирование кода (об операции побитового ин­вертирования — см. далее), полученное двоичное число переводится в деся­тичную систему, к нему прибавляется единица (и добавляется знак минус).

Для перевода отрицательного числа из десятичной в двоичную систему от модуля числа отнимают единицу, результат переводят в бинарный код и затем этот код инвертируют.

Умножение числа на два эквивалентно сдвигу влево на один бит позиционной записи числа (с заполнением первого бита нулем).

Побитовые операторы Java описаны в табл. 1.5.

 

 

Таблица 1.5. Побитовые операторы Java

Оператор Название Пояснение
& Побитовое И Бинарный оператор. Логическая операция И приме­няется к каждой паре битов операндов. Результатом является 1, если каждый из двух сравниваемых битов равен 1. В противном случае результат равен 0
| Побитовое ИЛИ Бинарный оператор. Логическая операция ИЛИ при­меняется к каждой паре битов операндов. Результатом является 1, если хотя бы один из двух сравниваемых битов равен 1. В противном случае результат равен 0
^ Побитовое ИСКЛЮЧА­ЮЩЕЕ ИЛИ Бинарный оператор. Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ применяется к каждой паре битов операндов. Результатом является 1, если один и только один из двух сравниваемых битов равен 1. В противном случае результат равен 0
~ Побитовое отрицание Унарный оператор. Выполняется инверсия двоичного кода: 0 меняется на 1, а 1 меняется на 0
>> Сдвиг вправо Бинарный оператор. Результатом является число, получаемое сдвигом вправо в позиционном пред­ставлении первого операнда (слева от оператора) на количество битов, определяемых вторым операндом (справа от оператора). Исходное значение перво­го операнда при этом не меняется. Младшие биты теряются, а старшие заполняются дублированием знакового бита
<< Сдвиг влево Бинарный оператор. Результатом является число, получаемое сдвигом влево в позиционном представле­нии первого операнда (слева от оператора) на количе­ство битов, определяемых вторым операндом (справа от оператора). Исходное значение первого операнда при этом не меняется. Младшие биты заполняются нулями, а старшие теряются
>>> Беззнаковый сдвиг вправо Бинарный оператор. Результатом является число, по­лучаемое сдвигом вправо в позиционном представле­нии первого операнда (слева от оператора) на количе­ство битов, определяемых вторым операндом (справа от оператора). Исходное значение первого операнда при этом не меняется. Младшие биты теряются, а старшие заполняются нулями
&= Упрощенная форма побито­вого оператора & с присваиванием Команда вида A&=B является эквивалентом команды A=A&B
|= Упрощенная форма побито­вого оператора | с присваиванием Команда вида A|=B является эквивалентом команды A=A|B

 

 

Оператор Название Пояснение
^= Упрощенная форма побито-вого оператора ^ с присваиванием Команда вида A^=Bявляется эквивалентом команды A=A^B
>>= Упрощенная форма побитово-го оператора >> с присваиванием Команда вида A>>=Bявляется эквивалентом команды A=A>>B
<<= Упрощенная форма побитово-го оператора << с присваиванием Команда вида A<<=Bявляется эквивалентом команды A=A<<B
>>>= Упрощенная форма побитово-го оператора >>> с присваиванием Команда вида A>>>=Bявляется эквивалентом команды A=A>>>B

 

 

За редким исключением, побитовые операции используются в случаях, когда необходимо оптимизировать программу в отношении быстродействия.

Помимо перечисленных операторов, в Java есть единственный тернарный опе­ратор (у оператора три операнда). Формально оператор обозначается как ?:. Синтаксис вызова этого оператора следующий:

условие?значение_1:значение_2

Первым операндом указывается условие — выражение, возвращающее в качестве значения логическое значение. Если значение выражения-условия равно true, в качестве значения тернарным оператором возвращается значение_1. Если зна­чением выражения-условия является false, тернарным оператором в качестве значения возвращается значение_2.

Несколько замечаний по поводу оператора присваивания (оператор =). В Java оператор присваивания возвращает значение. Команда вида x=y выполняется следующим образом. Сначала вычисляется выражение y, после чего это выра­жение приводится к типу переменной x и затем записывается в эту переменную. Благодаря тому, что, в отличие от других операторов с равными приоритетами, присваивание выполняется справа налево, в Java допустимыми являются ко­манды вида x=y=z. В этом случае значение переменной z присваивается сначала переменной y, а затем значение переменной y присваивается переменной x.

Еще одно замечание касается упрощенных форм операторов с присваиванием, то есть операторов вида op=. Хотя утверждалось, что команда вида A op=B эк­вивалента команде A=A op B, это не совсем так. При выполнении команды вида A op=B сначала вычисляется выражение A op B, затем полученное значение при­водится к типу переменной A и только после этого присваивается переменной A. Поскольку приведение к типу переменной A выполняется, фактически, явно, а в команде A=A op B приведение типов неявное, может проявиться разница в использовании полной и упрощенной форм команд присваивания. Рассмо­трим простой пример:

byte a=10,b=20;

// Правильно:

a+=20;

// Неправильно:

a=a+b;

В данном случае команда a+=20 является корректной, а команда a=a+b — нет. В первом случае литерал 20 типа int «насильственно» приводится к типу byte в силу особенностей оператора +=. Во втором случае результат вычисления вы­ражения a+b автоматически расширяется до типа int, а автоматическое приведе­ние типа int к типу byte запрещено.

Напоследок приведем в табл. 1.6 данные о приоритете различных операторов в Java.

 

Таблица 1.6. Приоритеты операторов в Java

 

Приоритет Операторы
Круглые скобки ( ), квадратные скобки [ ] и оператор «точка»
Инкремент ++, декремент --, отрицания ~ и !
Умножение *, деление / и вычисление остатка %
Сложение + и вычитание -
Побитовые сдвиги >>, << и >>>
Больше >, больше или равно >=, меньше или равно <= и меньше <
Равно = = и неравно ! =
Побитовое И &
Побитовое исключающее ИЛИ ^
Побитовое ИЛИ |
Логическое И &&
Логические ИЛИ ||
Тернарный оператор ?:
Присваивание = и сокращенные формы операторов вида op=

 

Операторы равных приоритетов (за исключением присваивания) выполняются слева направо. В случаях когда возникают сомнения в приоритете операторов и последовательности вычисления выражений, рекомендуется использовать круглые скобки.

 

Примеры программ

Далее рассмотрим некоторые задачи, которые иллюстрируют возможности Java и специфику синтаксиса этого языка.



2018-07-06 400 Обсуждений (0)
Основные операторы Java 0.00 из 5.00 0 оценок









Обсуждение в статье: Основные операторы Java

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (400)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)