Pengendali skala


Operator ialah simbol yang memberitahu pengkompil untuk melaksanakan operasi matematik dan logik tertentu.

Scala mempunyai set pengendali terbina dalam yang kaya, termasuk jenis berikut:

  • Pengendali aritmetik

  • Pengendali perhubungan

  • Pengendali logik

  • Pengendali bitwise

  • Pengendali tugasan

Seterusnya kami akan memperkenalkan aplikasi operator di atas secara terperinci.


Pengendali aritmetik

Jadual berikut menyenaraikan pengendali aritmetik yang disokong oleh Scala.

Anggap pembolehubah A ialah 10 dan B ialah 20:

运算符描述实例
+加号A + B 运算结果为 30
-减号A - B 运算结果为 -10
*乘号A * B 运算结果为 200
/除号B / A 运算结果为 2
%取余B % A 运算结果为 0

Instance

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) );
      
   }
}

Jalankan instance»

Laksanakan Kod di atas, hasil output ialah:

$ scalac Test.scala 
$ scala Test
a + b = 30
a - b = -10
a * b = 200
b / a = 2
b % a = 0
c % a = 5

Pengendali perhubungan

Jadual berikut menyenaraikan pengendali perhubungan yang disokong oleh Scala.

Andaikan pembolehubah A ialah 10 dan B ialah 20:

运算符描述实例
==等于(A == B) 运算结果为 false
!=不等于(A != B) 运算结果为 true
>大于(A > B) 运算结果为 false
<小于(A < B) 运算结果为 true
>=大于等于(A >= B) 运算结果为 false
<=小于等于(A <= B) 运算结果为 true

Contoh

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) );
   }
}

Laksanakan kod di atas, hasil output ialah:

$ scalac Test.scala 
$ scala Test
a == b = false
a != b = true
a > b = false
a < b = true
b >= a = true
b <= a = false

Operator Logik

Jadual berikut menyenaraikan pengendali logik yang disokong oleh Scala.

Anggap pembolehubah A ialah 1 dan B ialah 0:

运算符描述实例
&&逻辑与(A && B) 运算结果为 false
||逻辑或(A || B) 运算结果为 true
!逻辑非!(A && B) 运算结果为 true

Instance

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) );
   }
}

melaksanakan kod di atas, dan hasil output ialah:

$ scalac Test.scala 
$ scala Test
a && b = false
a || b = true
!(a && b) = true

Pengendali bit

Pengendali bit digunakan untuk beroperasi pada bit binari, ~ ,&,|,^ masing-masing adalah operasi penolakan, bitwise AND, bitwise AND, bitwise AND dan XOR, seperti yang ditunjukkan dalam contoh jadual berikut:

pqp & qp | qp ^ q
00000
01011
11110
10011

Jika anda menyatakan A = 60 dan B = 13; Perduaan yang sepadan dengan dua pembolehubah ialah:

A = 0011 1100

B = 0000 1101

-------位运算----------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

Peraturan operasi bitwise dalam Scala adalah seperti berikut:

运算符描述实例
&按位与运算符(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
>>>无符号右移A >>>2 输出结果 15, 二进制解释: 0000 1111

Instance

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;           /* 215 = 1111 */
      println("a >> 2  = " + c );

      c = a >>> 2;          /* 215 = 0000 1111 */
      println("a >>> 2 = " + c );
   }
}

melaksanakan kod di atas, dan hasil output ialah:

$ 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

Operator Tugasan

Berikut menyenaraikan pengendali tugasan yang disokong oleh Scala bahasa:

运算符描述实例
=简单的赋值运算,指定右边操作数赋值给左边的操作数。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 is equivalent to 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

Instance

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 >>= 2 ;
      println("c >>= a  = " + c );

      c &= a ;
      println("c &= 2  = " + c );
     
      c ^= a ;
      println("c ^= a  = " + c );

      c |= a ;
      println("c |= a  = " + c );
   }
}

melaksanakan kod di atas, dan hasil output ialah:

$ 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  = 1
c &= 2  = 0
c ^= a  = 10
c |= a  = 10

Keutamaan operator

mungkin mengandungi berbilang perbezaan dalam satu ungkapan Objek data bagi jenis data yang berbeza yang disambungkan oleh pengendali kerana ungkapan mempunyai berbilang operasi, perintah operasi yang berbeza mungkin menghasilkan hasil yang berbeza atau ralat operasi yang salah, kerana apabila ungkapan mengandungi berbilang operasi, ia mestilah Hanya dengan menggabungkan dalam susunan tertentu boleh rasional operasi dan ketepatan dan keunikan keputusan dipastikan.

Keutamaan berkurangan dari atas ke bawah, dengan yang teratas mempunyai keutamaan tertinggi dan pengendali koma mempunyai keutamaan paling rendah.

Dalam keutamaan yang sama, pengiraan adalah berdasarkan susunan gabungan. Kebanyakan operasi dikira dari kiri ke kanan, dan hanya tiga tahap keutamaan digabungkan dari kanan ke kiri Ia adalah operator unary, operator bersyarat dan pengendali tugasan.

Keutamaan asas perlu diingat:

  • Penunjuk adalah optimum, dan operasi bermata adalah lebih baik daripada operasi binokular. Seperti tanda tambah dan tolak.

  • Mula-mula darab dan bahagi (modulo), kemudian tambah dan tolak.

  • Operasi aritmetik dahulu, kemudian operasi anjakan, dan akhirnya operasi bit. Sila beri perhatian khusus kepada: 1 << 3 + 2 & 7 adalah bersamaan dengan (1 << (3 + 2))&7

  • Pengiraan terakhir bagi logik operasi

th>< td >Koma
Jenis pengendaliOperatorMenggabungkan arah
Kendalian ungkapan() [] /tr>< tr>Pengendali unary
运算符类型运算符结合方向
表达式运算() [] . expr++ expr--左到右
一元运算符

* & + - ! ~ ++expr --expr

* / %

+ -

>> <<

< > <= >=

== !=

右到左
位运算符

&

^

|

&&

||

左到右
三元运算符?:右到左
赋值运算符= += -= *= /= %= >>= <<= &= ^= |=右到左
逗号,左到右
* & + - ! <🎜>><<<🎜><🎜><= >=<🎜><🎜>== !=<🎜>
Kanan ke kiri
Pengendali bitwise<🎜>&<🎜><🎜>^<🎜> <🎜 >|<🎜><🎜>&&<🎜><🎜>||<🎜>Kiri ke kanan
Pengendali Ternary?:Kanan ke kiri
Pengendali tugasan = += -= *= /= %= >>= <<= &= ^= |=Kanan ke kiri
,Kiri ke kanan
<🎜>