Предыдущая часть — 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.