Scala 位运算符 优先级 自增 自减 浮点数精度 大数?

84 阅读2分钟

一. 位运算符

1.1.常用:

1.1.1 & 按位与运算符 0&1 = 0 1&0= 0 0&0 = 0 1&1 = 1
println("0 & 1 =" + (0 & 1)) //0
println("1 & 0 =" + (1 & 0)) //0
println("0 & 0 =" + (0 & 0)) //0
println("1 & 1 =" + (1 & 1)) //1
1.1.2. | 按位或运算符 0|1 = 1 1|0= 1 0|0 = 0 1|1 = 1
println("0 | 1 =" + (0 | 1)) //1
println("1 | 0 =" + (1 | 0)) //1
println("0 | 0 =" + (0 | 0)) //0
println("1 | 1 =" + (1 | 1)) //1
1.1.3. ^ 按位异或运算符。0^1 = 1,  1^1= 0 0^0 = 0
println("0 ^ 1 =" + (0 ^ 1)) //1
println("1 ^ 1 =" + (1 ^ 1)) //0
println("0 ^ 0 =" + (0 ^ 0)) //0
1.2. ~  按位取反运算符
1.2.1. << 左移运算符 右边补零 放大
1.2.2. >> 右移运算符 左边补零 缩小
1.2.3. << 左移运算符 右边补零 放大
1.2.4. >> 右移运算符 左边补零 缩小

1.3.综合练习:

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

二. 优先级

2.1. 乘除模 > 加减

2.2. 算术 > 关系 > 赋值

2.3. && > ||

2.4. 练习

val result = 10-2+3*4/2
println(result)//14

val a = true
val b = false
val c = false

println(a || b && c) // 先算&&后算// ===> true
println(a || (b && c))//true
println((a || b) && c)//false

三. 自增 自减

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

四. 浮点数精度

val a = 0.1
val b = 0.2 
val c = 0.3

println(a+b==c)//false

//BigInt:处理浮点数的精确问题
println(BigDecimal(a)+BigDecimal(b)==BigDecimal(c))//true

五. 大数

val a = 2147483647
val b = 1
//a和b都是Int类型 a+b的结果也是Int类型
//Int类型的最大值是 2147583647
//2147483647 + 1 = -2147483647
print(a+b)
//计算它们的平均数
var c = (a+b)/2
var d = a-(a-b)/2
println(c)//-1073741824
println(d)//1073741824

var a1 = BigInt("123456789012345678901234567890")
var b1 = BigInt("987654321098765432109876543210")
println(a1+b1)
println(a1*b1)