русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 4107; Нарушение авторских прав


 

Мне кажется, давно уже пора приступить к разработке документа, в котором будет четко оговорено, что граждане могут делать в свое свободное время, а чего они делать не должны.

Из к/ф «Забытая мелодия для флейты»

 

Все операторы 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, то значение второго операнда не проверяется
  | Логическое ИЛИ Бинарный оператор. Результатом операции A|B являет- ся 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) в десятичную выполняется так:


0 1 2


n-1 n


b02


+ b12


+ b22


+ ... + bn-12


+ bn 2 .


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

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

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

Побитовые операторы 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=

 

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

 



<== предыдущая лекция | следующая лекция ==>
Приведение типов | Условная инструкция if()


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.779 сек.