(一)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)