Scala中的运算符
1.算术运算符
/ :取余数 % :除
eg:
var a = 1234
// 在()内使用算数运算对a进行操作,以便输出对应结果
println(a/1000) //1
println(a/100%10) //2
println((a%100)/10) //3
println(a%10) //4
2.关系运算符
==: 等于
!=: 不等于
> :大于
< :小于
>=:大于等于
<=:小于等于
eg:
var b: Boolean=1==1
println(b) //输出为true
println(1 !=2) //输出为true
println(1>2) //输出为false
println(1<2) //输出为true
println(2>=2) //输出为true
println(2<=2) //输出为true
eg:
3.逻辑运算符
与:&& 运算表达式有一个为假,则整个表达式为假
或:|| 运算表达式有一个为真,则整个表达式为真
非:! 就是取反的意思,与参与表达式相反
eg:
println(3<5||5>3) //true
println(3<5||5>3) //true
println(!(2>1)) //false
scala的短路运算
运算法则:result=表达式1 运算符 表达式2
运算符为&&时:如果表达式1为false,则result=false,也就是说此时表达式1能够决定整个与运算的值,因此不会再去求表达式2的值
eg:
def f():Boolean={
println("f")
false
}
1 > 2 && f()
//false
2 > 1 && f()
运算符为||时:如果表达式1为true,则result=true,也就是说此时表达式1能够决定整个或运算的值,因此不会再去求表达式2的值。
eg:
def f():Boolean={
println("f")
false
}
// 1 > 2 && f()
//false
// 2 > 1 && f()
2>1||f()
scala的位运算符
注:需要二进制基础 1. & 按位与运算符。0&1 = 0, 1&0= 0 , 0&0 = 0, 1&1 = 1
2. | 按位或运算符。0|1 = 1, 1|0= 1 , 0|0 = 0, 1|1 = 1
3. ^ 按位异或运算符。0^1 = 1, 1^1= 0, 0^0 = 0
4. ~ 按位取反运算符
5. << 左移运算符。右边补零,放大
6.>> 右移运算符。左边补零,缩小
eg:
var a =5 //二进制为:101
var b =4 //二进制为:100
println("5 & 4="+(5&4)) //0
println("5 | 4="+(5|4)) //5
println("5 ^ 4="+(5^4)) //1
println("5 - 4="+(5-4)) //1
println("4 >> 2="+(4>>2)) //1
println("4 << 2="+(4<<2)) //16
scala的运算优先级
基本规则:
1. 乘除模 > 加减
2. 算术 > 关系 > 赋值
3. && >
记不清楚可以用()来调整
eg:
val a =true
val b =false
val c =false
println(a || b && c)
println(a || (b && c))
//先算&&,后算|| ===> true
println((a || b) && c) //false
scala的自增和自减运算
注:在scala中没有++和--这样的自增和自减运算符,需要用其他运算符进行替代
++: +=1
--:-+1
scala浮点精度问题
val a =0.1
val b =0.2
val c =0.3
println(a + b ==c) //false否
//因为计算机精度问题存在误差,a+b不等于c
//使用BigDecimal()函数可以解决,true
println(BigDecimal(a) + BigDecimal(b) == BigDecimal(c))
scala的大数问题
一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,超过了范围就会报错,或导致异常。
eg:
var a =2147483647
var b =1
println(a+b)
//a和b都是INt类型,所以a+b结果也是INt类型
//INt类型最大值是2147483647
2147483647+1=-2147483648
eg2:
//计算他们的平均数
var c =(a+b)/2 //a,-2147483648
var c1=a-(a-b)/2 //1073741824
println(c)
可以使用用BigInt(数字字符串)来解决这个问题 eg:
val a1=BigInt("123456789012345678901234567890") //1111111110111111111011111111100
val b1=BigInt("987654321098765432109876543210") //121932631137021795226185032733622923332237463801111263526900
println(a1+b1)
println(a1*b1)