scala基本运算

51 阅读1分钟

(一)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. >> 右移运算符。左边补零,缩小。

 &按位与运算符。0&1 = 0,  1&0= 0 , 0&0 = 0, 1&1 = 1
  6  1 1 0
  2  0 1 0
     0 1 0  (2)
  | 按位或运算符   0|1 = 1,  1|0= 1 , 0|0 = 0, 1|1 = 1
  6   1 1 0
   2  0 1 0
      1 1 0  (6)

(二)Scala中运算符的优先级

1. 乘(*)除(/)模(%) > 加(+)减(-)

2. 算术(+-*/%) > 关系(><>=!=) > 赋值(=)

3. && > | |

val result = 10 - 2 + 3 * 4 / 2
//    先算3*4/2 再算10 - 2 +6
//    println(resule) // 问题1
    println(14)

    val a = true
    val b = false
    val c = false
//先算&& 再算||
    false && false == false
    true || false == true
//    println(a || b && c) //问题2
    println(true)

(三)Scala的相等性

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

2. eq 引用比较

(四)Scala中的自增和自减运算

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

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

(五)浮点数精度问题

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

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

println(0.1 + 0.2 == 0.3)  
println(BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3))

(六)大数问题

小技巧:另一种计算平均值的方法: a - (a-b)/2 例如:

    val a = 213242455
    val b = 1
//  val c = (a + b) /2(Bug)
    val c = a -(a-b)/2
    println(c)