English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala 运算符

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.

Operatori aritmetici

La tabella seguente elenca gli operatori aritmetici supportati da Scala.

Supponiamo che la variabile A sia 10 e B sia 20:

运算符DescrizioneEsempio
+segno di aggiuntaA + B risultato dell'operazione è 30
-segno di sottrazioneA - B risultato dell'operazione è -10
*segno di moltiplicazioneA * B risultato dell'operazione è 200
/slashB / A risultato dell'operazione è 2
%moduloB % A risultato dell'operazione è 0

Esempio online

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

Operatori di relazione

La tabella seguente elenca gli operatori di relazione supportati da Scala.

Supponiamo che la variabile A sia 10 e B sia 20:

运算符DescrizioneEsempio
==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

Esempio online

Esempio

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

Operatori logici

La tabella seguente elenca gli operatori logici supportati da Scala.

Supponiamo che la variabile A sia 1, B sia 0:

运算符DescrizioneEsempio
&&E logicoRisultato dell'operazione (A && B) è false
||O logicoRisultato dell'operazione (A || B) è true
!Negazione logicaRisultato dell'operazione !(A && B) è true

Esempio online

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

Operatori bit a bit

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:

pqp & qp | qp ^ q
00000
01011
11110
10011

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:

运算符DescrizioneEsempio
&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 bitIl 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 sinistraa << 2 Il risultato dell'output è 240, spiegazione binaria: 1111 0000
>>Operatore di spostamento a destraa >> 2 Il risultato dell'output è 15, spiegazione binaria: 0000 1111
>>>Spostamento a destra senza segnoA >>>2 Il risultato dell'output è 15, spiegazione binaria: 0000 1111

Esempio online

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

Operatori di assegnamento

Di seguito sono elencati gli operatori di assegnamento supportati dal linguaggio Scala:

运算符DescrizioneEsempio
=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 sinistraC <<= 2 è equivalente a C = C << 2
>>=Assegnamento dopo lo shift bitwise a destraC >>= 2 è equivalente a C = C >> 2
&=Assegnamento dopo l'operazione bitwise ANDC &= 2 è equivalente a C = C & 2
^=Assegnamento dopo l'operazione bitwise XORC ^= 2 è equivalente a C = C ^ 2
|=Assegnamento dopo l'operazione bitwise ORC |= 2 è equivalente a C = C | 2

Esempio online

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,从左到右