Scala运算符

66 阅读2分钟

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

& 按位与运算符

println("0 & 1 =" + (0 & 1))  // 0
println("1 & 0 =" + (1 & 0))  // 0
println("0 & 0 =" + (0 & 0))   // 0
println("1 & 1 =" + (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

^ 按位异或运算符

println("0 ^ 1 =" + (0 ^ 1))  // 1
println("1 ^ 1 = " + (1 ^ 1))  // 0
println("0 ^ 0 =" + (0 ^ 0))  // 0

~ 按位取反运算符

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

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

练习
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.&& > ||

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

Scala中的自增和自减运算

在Scala中没有++和--这样的自增和自减运算符。

那么要想在Scala中实现类似于Java中的自增和自减运算,可以使用如下的赋值运算符进行替代。

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

--:用赋值运算符 -=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

大数问题

//大数问题
    var a = 2147483647
    var b =1
// a 和 b 都是 Int类型 所以a+b的结果也是Int类型
// Int类型的最大值是  2147483647
// 2147483647 + 1 = -2147483647
    println(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)  // 1111111110111111111011111111100
    println(a1 * b1)  // 121932631137021795226185032733622923332237463801111263526900