Операторы


Предыдущая страница
Следующая страница  

Оператор – это символ, который предписывает компилятору выполнить определенные математические или логические манипуляции. В языке D большое количество встроенных операторов, и их можно разделить на следующие типы:

В этой главе по очереди описываются арифметические, сравнивающие, логические, побитовые, присваивающие и другие операторы.

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

В следующей таблице показаны все арифметические операторы, поддерживаемые языком D. Предположим, что в переменной A содержится 10, а в переменной B – 20, тогда:

Показать примеры

Оператор Описание Пример
+ Складывает два операнда. A + B даст 30
- Вычитает второй операнд из первого. A - B даст -10
* Перемножает два операнда. A * B даст 200
/ Делит числитель на знаменатель. B / A даст 2
% Возвращает остаток от целочисленного деления. B % A даст 0
++ Оператор приращения увеличивает целое значение на единицу. A++ даст 11
-- Оператор декремента уменьшает целое значение на единицу. A-- даст 9

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

В следующей таблице показаны все операторы сравнения, поддерживаемые языком D. Предположим, что в переменной A содержится 10, а в переменной B – 20, тогда:

Показать примеры

Оператор Описание Пример
== Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. (A == B) – false.
!= Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (A != B) – true.
> Проверяет, что значение левого операнда больше значения правого операнда, если да, тогда условие становится истинным. (A > B) – false.
< Проверяет, что значение левого операнда меньше значения правого операнда, если да, тогда условие становится истинным. (A < B) – true.
>= Проверяет, что значение левого операнда больше или равно значению правого операнда, если да, тогда условие становится истинным. (A >= B) – false.
<= Проверяет, что значение левого операнда меньше или равно значению правого операнда, если да, тогда условие становится истинным. (A <= B) – true.

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

В следующей таблице показаны все логические операторы, поддерживаемые языком D. Предположим, что в переменной A содержится 1, а в переменной B – 0, тогда:

Показать примеры

Оператор Описание Пример
&& Называется логическим оператором И. Если оба операнда отличны от нуля, тогда условие становится истинным. (A && B) – false.
|| Называется логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, тогда условие становится истинным. (A || B) – true.
! Называется оператором логического отрицания NOT. Используется для изменения логического состояния операнда. Если условие истинно, тогда логический оператор NOT сделает результат ложным. !(A && B) – true.

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

Побитовые операторы работают с битами и выполняют операции с отдельными двоичными разрядами. Таблицы истинности для операторов &, |, и ^ выглядят так:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

Предположим, что A = 60; И B = 13. В двоичном формате они будут выглядеть следующим образом:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

Побитовые операторы, поддерживаемые языком D, перечислены в следующей таблице. Предположим, что переменная A содержит значение 60, а переменная B равна 13, тогда:

Показать примеры

Оператор Описание Пример
& Бинарный оператор И копирует бит в результат, если он существует в обоих операндах. (A & B) даст 12, или двоичное 0000 1100.
| Бинарный оператор ИЛИ копирует бит, если он существует в любом из операндов. (A | B) даст 61, или двоичное 0011 1101.
^ Бинарный оператор Исключающее ИЛИ копирует бит, если он установлен в одном из операндов, но не в обоих. (A ^ B) даст 49, или двоичное 0011 0001
~ Оператор Дополнения является унарным и имеет эффект «переворачивания» бит. (~A ) даст -61, или двоичное 1100 0011 в форме дополнения двойки.
<< Бинарный оператор Сдвига влево. Значение левого операнда перемещается влево на количество бит, заданное правым операндом. A << 2 даст 240, или двоичное 1111 0000
>> Бинарный оператор Сдвига вправо. Значение левого операнда перемещается вправо на количество бит, заданное правым операндом. A >> 2 даст 15, или двоичное 0000 1111.

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

Следующие операторы присваивания поддерживаются в языке D:

Показать примеры

Оператор Описание Пример
= Это простой оператор присваивания. Он присваивает значения из правых операндов в левый операнд. C = A + B присвоит значение суммы A + B в C
+= Это оператор сложения И присвоения. Он складывает правый операнд с левым операндом и присваивает результат левому операнду. C += A эквивалетно C = C + A
-= Это оператор вычитания И присвоения. Он вычитает правый операнд из левого операнда и присваивает результат левому операнду. C -= A эквивалетно C = C - A
*= Это оператор умножения И присвоения. Он умножает правый операнд на левый операнд и присваивает результат левому операнду. C *= A эквивалетно C = C * A
/= Это оператор деления И присвоения. Он делит левый операнд на правый операнд и присваивает результат левому операнду. C /= A эквивалетно C = C / A
%= Это оператор получения остатка от деления И присвоения. Он получает остаток от деления левого операнда на правый операнд и присваивает результат левому операнду. C %= A эквивалетно C = C % A
<<= Это оператор сдвига влево И присвоения. C <<= 2 тоже самое, что и C = C << 2
>>= Это оператор сдвига вправо И присвоения. C >>= 2 тоже самое, что и C = C >> 2
&= Это оператор бинарного И с последующим присвоением. C &= 2 тоже самое, что и C = C & 2
^= Это оператор бинарного Исключающего ИЛИ с последующим присвоением. C ^= 2 тоже самое, что и C = C ^ 2
|= Это оператор бинарного ИЛИ с последующим присвоением. C |= 2 тоже самое, что и C = C | 2

Другие операторы

В языке D существует ещё несколько важных операторов, включая sizeof и ? :

Показать примеры

Оператор Описание Пример
sizeof() Возвращает размер памяти, занимаемый переменной. sizeof(a), где a - целое число типа int, возвращает 4.
& Возвращает адрес переменной. &a; даст фактический адрес переменной a.
* Указатель на переменную. *a; даст указатель на переменную.
? : Условное выражение Если условие истинно, тогда значение X: иначе значение Y.

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

Приоритет оператора определяет группирование термов в выражении. Это влияет на вычисление выражения. Некоторые операторы имеют приоритет над другими.

Например, оператор умножения имеет более высокий приоритет, чем оператор сложения.

Рассмотрим выражение

x = 7 + 3 * 2.

Здесь в x присваивается 13, а не 20. Просто дело в том, что оператор * имеет более высокий приоритет, чем +, поэтому сначала вычисляется 3 * 2, а затем результат прибавляется к 7.

В этой таблице операторы с наивысшим приоритетом показаны в верхней части, а с наименьшим – внизу. Внутри выражения сначала вычисляются операторы с более высоким приоритетом.

Показать примеры

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

Предыдущая страница
Следующая страница