scala的位运算符
1 常用运算符:
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. >> 右移运算符。左边补零,缩小。
2 scala运算符的优先级
- 单目运算符 > 算术运算符(先乘除后加减)。
- 关系运算符 > 逻辑运算符(先比较后逻辑判断)。
- 逻辑与(
&&)> 逻辑或(||) 。 - 赋值运算符优先级最低(最后执行)。
- 不确定时,用括号
()强制改变优先级(可读性更高)。
3 scala运算符的相等性
Scala 中用于判断相等性的运算符:
==:值相等性判断(会自动处理 null,比较对象内容而非引用)!=:值不相等判断eq:引用相等性判断(仅用于对象,判断是否为同一实例)ne:引用不相等判断
val x = 5
val y = 5
val z = new Integer(5)
println(x == y) // true (值相等)
println(x == z) // true (值相等)
println(x eq z) // false (不同引用)
注意事项:
- 位运算符仅适用于整数类型(Byte、Short、Int、Long)
==在比较不同类型时会进行隐式转换(如 Int 和 Long)- 对于自定义类,应重写
equals方法以实现有意义的值相等性判断 - 位运算的结果可以安全地用于
==判断,但注意整数溢出问题
4 scala中的自增和自减运算
4.1使用赋值表达式
通过 += 和 -= 操作符配合 1 来实现:
var x = 5
x += 1 // 相当于 x = x + 1,结果为 6
x -= 1 // 相当于 x = x - 1,结果为 5
4.2直接重新赋值
显示写出赋值表达式
var y = 3
y = y + 1 // 自增,结果为 4
y = y - 1 // 自减,结果为 3
5 浮点数精度问题
由于精度的问题,小数的计算会存在误差
如何处理
5.1 避免直接比较浮点数
不要使用==直接比较浮点数,而应检查它们的差值是否在可接受范围内:
5.2 使用BigDecimal 例如:
import scala.math.BigDecimal
import scala.math.BigDecimal.RoundingMode
val a = BigDecimal(0.1)
val b = BigDecimal(0.2)
val c = a + b
// 设置精度和舍入模式
val result = c.setScale(2, RoundingMode.HALF_UP)
println(result) // 输出:0.30
6大数问题
Scala 的基本数值类型有固定范围:
Byte: -128 到 127Short: -32768 到 32767Int: -2^31 到 2^31-1(约 ±20 亿)Long: -2^63 到 2^63-1(约 ±9 万亿)
6.1如何处理大数问题
使用BigInt处理大整数
BigInt 是处理大数问题的理想选择,它支持任意精度的整数运算,不受常规数据类型的范围限制。