English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Оператор - это символ, который говорит компилятору выполнять指定的 математические и логические операции.
Scala содержит множество встроенных операторов, включая следующие типы:
Арифметические операторы
Отношение операторы
Логические операторы
Битовыми операторами
Операторы присвоения
Далее мы подробнее рассмотрим использование этих операторов.
В таблице приведены арифметические операторы, поддерживаемые Scala.
Предположим, что переменная A равна 10, B равна 20:
Операторы | Описание | Пример |
---|---|---|
+ | пзнаком сложения | A + B результат вычисления 30 |
- | пзнаком вычитания | A - B результат вычисления -10 |
* | пзнаком乘ения | A * B результат вычисления 200 |
/ | делитель | B / A результат вычисления 2 |
% | получение остатка | B % A результат вычисления 0 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 25; var d = 25; println("a + b = " + (a + b)); println("a - b = " + (a - b)); println("a * b = " + (a * b)); println("b / a = " + (b / a)); println("b % a = " + (b % a)); println("c % a = " + (c % a)); } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5
В таблице приведены отношения операторы, поддерживаемые Scala.
Предположим, что переменная A равна 10, B равна 20:
Операторы | Описание | Пример |
---|---|---|
== | равно | (A == B) результат вычисления false |
!= | не равно | (A != B) результат вычисления true |
> | больше | (A > B) результат вычисления false |
< | меньше | (A < B) результат вычисления true |
>= | больше или равно | (A >= B) результат вычисления false |
<= | меньше или равно | (A <= B) результат вычисления true |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; println("a == b = " + (a == b)); println("a != b = " + (a != b)); println("a > b = " + (a > b)); println("a < b = " + (a < b)); println("b >= a = " + (b >= a)); println("b <= a = " + (b <= a)); } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
В таблице ниже перечислены логические операторы, поддерживаемые Scala.
Предположим, что переменная A равна 1, B равна 0:
Операторы | Описание | Пример |
---|---|---|
&& | Логическое И | Результат вычисления (A && B) равен false |
|| | Логическое ИЛИ | Результат вычисления (A || B) равен true |
! | Логическое не | Результат вычисления !(A && B) равен true |
object Test { def main(args: Array[String]) { var a = true; var b = false; println("a && b = " + (a && b)); println("a || b = " + (a || b)); println("!(a && b) = " + !(a && b)); } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test a && b = false a || b = true !(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
Правила битовыми операциями в Scala таковы:
Операторы | Описание | Пример |
---|---|---|
& | оператор битовского И | (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 |
>>> | Несigned right shift | A >>>2 результат 15, двоичное представление: 0000 1111 |
object Test { def main(args: Array[String]) { var a = 60; /* 60 = 0011 1100 */ var b = 13; /* 13 = 0000 1101 */ var c = 0; c = a & b; /* 12 = 0000 1100 */ println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ println("a ^ b = " + c ); c = ~a; /* -61 = 1100 0011 */ println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ println("a << 2 = " + c ); c = a >> 2; /* 15 = 1111 */ println("a >> 2 = " + c ); c = a >>> 2; /* 15 = 0000 1111 */ println("a >>> 2 = " + c ); } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
Ниже перечислены операторы присвоения, поддерживаемые языком Scala:
Операторы | Описание | Пример |
---|---|---|
= | Простое присвоение, определение значения правой части для левой. | 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 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 0; c = a + b; println("c = a + b = " + c); c += a; println("c += a = " + c); c -= a; println("c -= a = " + c); c *= a; println("c *= a = " + c); a = 10; c = 15; c /= a; println("c /= a = " + c); a = 10; c = 15; c %= a; println("c %= a = " + c); c <<= 2; println("c <<= 2 = " + c); c >>= 2; println("c >>= 2 = " + c); c >>= a; println("c >>= a = " + c); c &= a; println("c &= 2 = " + c); c ^= a; println("c ^= a = " + c); c |= a; println("c |= a = " + c); } }
Выполните следующий код, результат вывода будет:
$ scalac Test.scala $ scala Test c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= a = 0 c &= 2 = 0 c ^= a = 10 c |= a = 10
Приоритет операторов зависит от группы, к которой они относятся, и это влияет на вычисление выражений.
Пример: x = 7 + 3 * 2; Здесь, результат вычисления x равен 13, а не 20, потому что умножение (*) выше, чем сложение (+), поэтому оно вычисляется сначала 3 * 2, а затем добавляется 7.
См. таблицу ниже, приоритет от верхнего к нижнему постепенно уменьшается, самыйupper имеет наибольший приоритет, оператор запятой имеет наименьший приоритет.
Категория | Операторы | Связанность |
---|---|---|
1 | () [] | Слева направо |
2 | ! ~ | Справа налево |
3 | * / % | Слева направо |
4 | + - | Слева направо |
5 | >> >>> << | Слева направо |
6 | > >= < <= | Слева направо |
7 | == != | Слева направо |
8 | & | Слева направо |
9 | ^ | Слева направо |
10 | | | Слева направо |
11 | && | Слева направо |
12 | || | Слева направо |
13 | = += -= *= /= %= >>= <<= &= ^= |= | Справа налево |
14 | , | Слева направо |