Scala - 运算符

Scala - 运算符 首页 / Scala入门教程 / Scala - 运算符

运算符是一个符号,告诉编译器执行特定的数学或逻辑操作, Scala具有丰富的内置运算符,并提供以下类型的运算符-

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 按位运算符

算术运算符

Scala语言支持以下算术运算符。如假设变量A=10,变量B=20,则-

运算符描述示例
+相加A + B=30
-相减A - B=-10
*相乘A * B=200
/相除B/A=2
%取模B % A=0

object
Demo { 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) ); } }

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
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) is not true.
!=不相等(A != B) is true.
>大于(A > B) is not true.
<小于(A < B) is true.
>=大于或等于(A >= B) is not true.
<=小于或等于(A <= B) is true.

object
Demo { 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) ); } }

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo

将以上程序输出:

a == b=false
a != b=true
a > b=false
a < b=true
b >= a=true
b <= a=false

逻辑运算符

Scala语言支持以下逻辑运算符。如假设变量A=1,变量B=0,则-

运算符
描述示例
&&逻辑和(AND)。(A && B) is false.
||逻辑或(OR)。(A || B) is true.
!逻辑非!(A && B) is true.

object
Demo { 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) ); } }

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
a && b=false
a || b=true
!(a && b)=true

按位运算符

按位运算符对位进行运算并执行逐位操作。&,|和^的真值表如下-

pqp & qp | qp ^ q
00000
01011
11110
10011

假设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=60,变量B=13,则-

运算符
描述示例
&按位AND(A & B)=12, which is 0000 1100
|按位 ORB)=61, which is 0011 1101
^按位 异或(A ^ B)=49, which is 0011 0001
~按位 取反(~A )=-61, which is 1100 0011 in 2's complement form due to a signed binary number.
<<左移位,左移一位乘以2,二位乘以4以此类批A << 2=240, which is 1111 0000
>>右移位,右移一位除以2,二位除以4以此类批A >> 2=15, which is 1111
>>>补零右移位A >>>2=15 which is 0000 1111

object
Demo { 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 ); } }

将以上程序保存在Demo.scala中,以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
a & b=12
a | b=61
a ^ b=49
~a=-61
a << 2=240
a >> 2=15
a >>> 2=15

运算符优先级

优先级最高的运算符出现在表格的顶部,优先级最低的运算符出现在表格的底部。在表达式中,优先级较高的运算符将首先被判断。

CategoryOperatorAssociativity
Postfix() []Left to right
Unary! ~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
Assignment= += -= *= /= %= >>= <<= &= ^= |=Right to left
Comma,Left to right

object
Demo { 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 >>= 2 =" + c ); c &= a ; println("c &= a =" + c ); c ^= a ; println("c ^= a =" + c ); c |= a ; println("c |= a =" + c ); } }

将以上程序保存在Demo.scala中。以下命令用于编译和执行该程序。

\>scalac Demo.scala
\>scala Demo
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 >>= 2 =1
c &= a =0
c ^= a =10
c |= a =10

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕

DDD实战课 -〔欧创新〕

说透敏捷 -〔宋宁〕

系统性能调优必知必会 -〔陶辉〕

TensorFlow 2项目进阶实战 -〔彭靖田〕

技术管理案例课 -〔许健〕

HarmonyOS快速入门与实战 -〔QCon+案例研习社〕

说透低代码 -〔陈旭〕

AI 应用实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)