Go: часть 6 – операторы

Предыдущая часть – 5 – константы.

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

  • арифметические операторы (Arithmetic Operators)
  • операторы сравнения (Relational Operators)
  • логические операторы (Logical Operators)
  • побитовые операторы (Bitwise Operators)
  • операторы присваивания (Assignment Operators)
  • другие операторы (Miscellaneous Operators)

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

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

В таблице ниже представлены основные арифметические операторы, которые поддерживаются в Go.
Предположим, что А = 10, а В = 20, тогда:

+ сложение двух операндов A + B gives 30
вычитает правый операнд из левого A – B gives -10
* умножение операндов A * B gives 200
/ деление B / A gives 2
% деление по модулю B % A gives 0
++ оператор инкремента (увеличение на 1) A++ gives 11
оператор декремента (уменьшение на 1) A– gives 9

См. примеры.

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

В следующей таблице представлены операторы сравнения в Go.

А по-прежнему содержит значение 10, а В -20:

Operator Description Example
== сравнивает равны ли значения операндов, возвращает true, если равны (A == B) is not true.
!= сравнивает равны ли значения операндов, возвращает true, если не равны (A != B) is true.
> проверяет, имеет ли левый операнд значение большее, чем правый, если да – возвращает true (A > B) is not true.
< проверяет, имеет ли левый операнд значение меньшее, чем правый, если да – возвращает true (A < B) is true.
>= проверяет, имеет ли левый операнд значение большее или равное правому, если да – возвращает true (A >= B) is not true.
<= проверяет, имеет ли левый операнд значение меньшее или равное правому, если да – возвращает true (A <= B) is true.

См. примеры.

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

Слеюдующая таблица представляет логиечские операторы в Go.

Предположим, что А == 1, а В == 0:

Operator Description Example
&& логический оператор “И” (AND). Если оба операнда не содержат ноль, то выражение истинно (A && B) is false.
|| логический оператор “ИЛИ” (OR). Если один из операндов не содержат ноль, то выражение истинно (A || B) is true.
! логический оператор “НЕ” (NOT). Используется для изменения логического состояния выражения – если выражение True, то оператор NOT сделает его False !(A && B) is true.

См. примеры.

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

Побитовые операторы, как ясно из названия, выполняют операции над битами.

Таблица соответствия для операторов for &, | и ^ будет следующей:

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

Предположим, что А = 60, а В = 13. В двоичном представлении этоу будет:

A = 0011 1100

B = 0000 1101

—————–

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

Основные двоичные операторы в Go представлены ниже:

Operator Description Example
& оператор “И” (AND) копирует бит в результат, если бит задан в обоих операндах (A & B) will give 12, which is 0000 1100
| оператор “ИЛИ” (OR) копирует бит в результат, если бит задан в одном из операндов (A | B) will give 61, which is 0011 1101
^ оператор “X-ИЛИ” (XOR) копирует бит в результат, если бит задан в одном из операндов, но не в обоих (A ^ B) will give 49, which is 0011 0001
<< оператор смещения влево – перемещает бит влево на ко-во позиций, заданное в правом операнде A << 2 will give 240 which is 1111 0000
>> оператор смещения вправо – перемещает бит влево на ко-во позиций, заданное в правом операнде

См. примеры.

См. также Bit Hacking with Go.

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

Таблица ниже представляет операторы присваивания, доступные в Go:

Operator Description Example
= простой оператор присваиваиния – присваивает значение правого операнда левому C = A + B will assign value of A + B into C
+= оператор присваивания и добавления – добавляет правый операнд к левому, и присваивает результат левому операнду C += A is equivalent to C = C + A
-= оператор присваивания и вычитания – вычитает правый операнд из левого, и присваивает результат левому операнду C -= A is equivalent to C = C – A
*= оператор присваивания и умножения – умножает правый операнд и левый, и присваивает результат левому операнду C *= A is equivalent to C = C * A
/= оператор присваивания и деления – делит левый операнд на правый, и присваивает результат левому операнду C /= A is equivalent to C = C / A
%= деление по модулю и присванивание – вычисляет остаток, используя оба операнда, и присваивает результат левому операнду C %= A is equivalent to C = C % A
<<= оператор смещения влево и присваивания C <<= 2 is same as C = C << 2
>>= оператор смещения вправо и присваивания C >>= 2 is same as C = C >> 2
&= побитовый оператор присваивания AND C &= 2 is same as C = C & 2
^= побитовый оператор присваивания OR исключения (XOR) C ^= 2 is same as C = C ^ 2
|= побитовый оператор присваивания OR (OR) C |= 2 is same as C = C | 2

См. примеры.

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

Кроме уже перечисленных – Go содержит другие важные операторы, такие как:

Operator Description Example
& возвращает адрес переменной &a; provides actual address of the variable.
* указатель на переменную *a; provides pointer to a variable.

См. примеры.

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

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

Так, в выражении x = 7 + 3 * 2; х будет присвоено значение 13, а не 20, т.к. оператор * имеет приоритет над +, поэтому сначала будет выоплнено 3*2, а потом добавлено 7.

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

Категория Оператор Порядок
Postfix () [] -> . ++ – – Left to right
Unary + – ! ~ ++ – – (type)* & sizeof Right to left
Multiplicative * / % Left to right
Additive + – Left to right
Shift << >> Left to right
Relational < <= > >= Left to right
Equality == != Left to right
Bitwise AND & Left to right
Bitwise XOR ^ Left to right
Bitwise OR | Left to right
Logical AND && Left to right
Logical OR || Left to right
Conditional ?: Right to left
Assignment = += -= *= /= %=>>= <<= &= ^= |= Right to left
Comma , Left to right

См. примеры.

Продолжение – часть 7 – Управляющие конструкции – операторы if/else/switch/select.