Scala中的各种运算

45 阅读2分钟

一.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中运算符的优先级

  1. 乘除模 > 加减

  2. 算术 > 关系 > 赋值

  3. && > | |

屏幕截图 2025-09-17 091454.png

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的相等性

  1. == 比较的对象只有数值,只要==两边的值相等,就返回true。

  2. 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)