一.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. >> 右移运算符。左边补零,缩小。
object Base10 {
def main(args: Array[String]): Unit = {
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("4 >> 2 =" + (4 >> 2)) // 1
println("4 << 2 =" + (4 << 2)) // 16\
}
}
二.Scala中运算符的优先级
-
乘除模 > 加减
-
算术 > 关系 > 赋值
-
&& > | |
object Base11 {
def main(args: Array[String]): Unit = {
val a = 0.1
val b = 0.2
val c = 0.3
println(1 + 2 == 3) // True
println(0.1 + 0.2 == 0.3) // false
println(BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3) )
println( 0.1 + 0.1 == 0.2) //True
}
}
三.Scala的相等性
-
== 比较的对象只有数值,只要==两边的值相等,就返回true。
-
eq 引用比较
def main(args: Array[String]): Unit = {
var s1 = "hello"
var s2 = new String("hello")
var s3 = new String("hello")
println(s1 == s2) // true
println(s1 eq s3) // false
}
四.Scala中的自增和自减运算
在Scala中没有++和--这样的自增和自减运算符。
那么要想在Scala中实现类似于Java中的自增和自减运算,可以使用如下的赋值运算符进行替代。
++:用赋值运算符 +=1代替++。
--:用赋值运算符 -=1代替--。
五.浮点数精度问题
由于精度的问题,小数的计算会存在误差。
解决方案:使用BigDecimal()函数。
BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3)
六.大数问题
一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,一旦超过了这个范围就会报错,或者是导致异常。
用BigInt(数字字符串)来解决这个问题
val a = BigInt("123456789012345678901234567890")
val b = BigInt("987654321098765432109876543210")
println(a + b)
println(a * b)