scala基本运算2

4 阅读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. ~ 按位取反运算符

  1. 左移运算符<< 右边补零,放大

  2.  右移运算符>> 左边补零,缩小

println("5&4 =" + (5&4) ) //4
println("5|4 =" + (5|4) )  //5
println("5^4 =" + (5^4) )   //1
println("~5" = + (~5))  //-6
println("4<<2 =" + (4<<2) ) //16
println("4>>2 =" + (4>>2) )  //1

Scala中的自增和自减运算

在Scala中没有++和--这样的自增和自减运算符。 想在Scala中实现类似于Java中的自增和自减运算,可以使用如下的赋值运算符进行替代

++:用赋值运算符 +=1代替++

--:用赋值运算符 -=1代替--

浮点数精度问题

println(0.1 +0.2)  //0.30000000000000004

解释:由于精度的问题,小数的计算会存在误差

解决方案:使用BigDecimal()函数。

println(BigDecimal(a) + BigDecimal(b) == BigDecimal(c))

大数问题

一种整数都有自己的表达范围,一旦超过了这个范围就会报错,或者是导致异常

object basic10 {
  def main(args: Array[String]): Unit = {
    var a = 2147483647
    var b = 1
    println(a+b)  //-2147483648

    //a和b都是Int类型,所以a+b的结果也是Int类型
    //Int类型的最大值是2147483647
   
    // 用BigInt(数字字符串)来解决这个问题
     val a1 = BigInt("123456789012345678901234567890")
     val b1 = BigInt("987654321098765432109876543210")
     println(a1+b1)  //1111111110111111111011111111100
     println(a1*b1)//121932631137021795226185032733622923332237463801111263526900

    //计算他们的平均数
    var c = (a+b)/2  //-1073741824
    var c = a -(a-b)/2  //-1073741824
    println(c)
  }
}