English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Un operatore è un simbolo utilizzato per informare il compilatore di eseguire l'operazione matematica e logica specificata.
Scala contiene una ricca gamma di operatori predefiniti, tra cui i seguenti tipi:
Operatori aritmetici
Operatori di relazione
Operatori logici
Operatori bit a bit
Operatori di assegnamento
In seguito vi forniremo una descrizione dettagliata dell'applicazione di tutti questi operatori.
La tabella seguente elenca gli operatori aritmetici supportati da Scala.
Supponiamo che la variabile A sia 10 e B sia 20:
运算符 | Descrizione | Esempio |
---|---|---|
+ | segno di aggiunta | A + B risultato dell'operazione è 30 |
- | segno di sottrazione | A - B risultato dell'operazione è -10 |
* | segno di moltiplicazione | A * B risultato dell'operazione è 200 |
/ | slash | B / A risultato dell'operazione è 2 |
% | modulo | B % A risultato dell'operazione è 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
La tabella seguente elenca gli operatori di relazione supportati da Scala.
Supponiamo che la variabile A sia 10 e B sia 20:
运算符 | Descrizione | Esempio |
---|---|---|
== | uguale | (A == B) risultato dell'operazione è false |
!= | uguale | (A != B) risultato dell'operazione è true |
> | maggiore | (A > B) risultato dell'operazione è false |
< | minore | (A < B) risultato dell'operazione è true |
>= | maggiore o uguale | (A >= B) risultato dell'operazione è false |
<= | minore o uguale | (A <= B) risultato dell'operazione è 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
La tabella seguente elenca gli operatori logici supportati da Scala.
Supponiamo che la variabile A sia 1, B sia 0:
运算符 | Descrizione | Esempio |
---|---|---|
&& | E logico | Risultato dell'operazione (A && B) è false |
|| | O logico | Risultato dell'operazione (A || B) è true |
! | Negazione logica | Risultato dell'operazione !(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
Gli operatori di operazione bit a bit vengono utilizzati per operare sui bit binari, ~,&,|,^ rappresentano negazione, AND bit a bit, OR bit a bit e XOR bit a bit, come nell'esempio seguente:
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 |
Se si specifica A = 60; e B = 13; i due variabili corrispondenti in binario sono:
A = 0011 1100 B = 0000 1101 ------- Operazioni bit a bit ---------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
Le regole di operazione bit a bit in Scala sono le seguenti:
运算符 | Descrizione | Esempio |
---|---|---|
& | Operatore di AND bit a bit | (a & b) Risultato di output 12, interpretazione binaria: 0000 1100 |
| | Operatore di OR bit a bit | (a | b) Risultato di output 61, interpretazione binaria: 0011 1101 |
^ | Operatore di XOR bit a bit | (a ^ b) Risultato di output 49, interpretazione binaria: 0011 0001 |
~ | Operatore di negazione bit a bit | Il risultato dell'output di (~a) è -61, spiegazione binaria: 1100 0011, in forma di complemento a due di un numero binario a segno. |
<< | Operatore di spostamento a sinistra | a << 2 Il risultato dell'output è 240, spiegazione binaria: 1111 0000 |
>> | Operatore di spostamento a destra | a >> 2 Il risultato dell'output è 15, spiegazione binaria: 0000 1111 |
>>> | Spostamento a destra senza segno | A >>>2 Il risultato dell'output è 15, spiegazione binaria: 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
Di seguito sono elencati gli operatori di assegnamento supportati dal linguaggio Scala:
运算符 | Descrizione | Esempio |
---|---|---|
= | Operazione di assegnamento semplice, assegnare il numero di destra alla variabile di sinistra. | C = A + B Assegna il risultato di A + B a C |
+= | Aggiungere e assegnare, sommare i numeri da entrambi i lati e assegnare il risultato alla variabile di sinistra. | C += A è equivalente a C = C + A |
-= | Assegnamento dopo la sottrazione, il numero a destra e a sinistra viene sottratto e assegnato al numero a sinistra. | C -= A è equivalente a C = C - A |
*= | Assegnamento dopo la moltiplicazione, il numero a destra e a sinistra viene moltiplicato e assegnato al numero a sinistra. | C *= A è equivalente a C = C * A |
/= | Assegnamento dopo la divisione, il numero a destra e a sinistra viene diviso e assegnato al numero a sinistra. | C /= A è equivalente a C = C / A |
%= | Assegnamento dopo il calcolo del resto, il numero a destra e a sinistra viene calcolato come resto e assegnato al numero a sinistra. | C %= A è equivalente a C = C % A |
<<= | Assegnamento dopo lo shift bitwise a sinistra | C <<= 2 è equivalente a C = C << 2 |
>>= | Assegnamento dopo lo shift bitwise a destra | C >>= 2 è equivalente a C = C >> 2 |
&= | Assegnamento dopo l'operazione bitwise AND | C &= 2 è equivalente a C = C & 2 |
^= | Assegnamento dopo l'operazione bitwise XOR | C ^= 2 è equivalente a C = C ^ 2 |
|= | Assegnamento dopo l'operazione bitwise OR | C |= 2 è equivalente a C = C | 2 |
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 0; c = a + b; stampa("c = a + b = " + c); c += a; stampa("c += a = " + c); c -= a; stampa("c -= a = " + c); c *= a; stampa("c *= a = " + c); a = 10; c = 15; c /= a; stampa("c /= a = " + c); a = 10; c = 15; c %= a; stampa("c %= a = " + c); c <<= 2; stampa("c <<= 2 = " + c); c >>= 2; stampa("c >>= 2 = " + c); c >>= a; stampa("c >>= a = " + c); c &= a; stampa("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。
查看以下表格,优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
类别 | 运算符 | 关联性 |
---|---|---|
1 | () [] | 从左到右 |
2 | ! ~ | 从右到左 |
3 | * / % | 从左到右 |
4 | + - | 从左到右 |
5 | >> >>> << | 从左到右 |
6 | > >= < <= | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
14 | , | 从左到右 |