scala中基本运算

23 阅读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. ~ 按位取反运算符

  1. 左移运算符<< 右边补零,放大
  2.  右移运算符>> 左边补零,缩小
 println("5&4 =" + (5&4) ) //4
println("5|4 =" + (5|4) )  //5
println("5^4 =" + (5^4) )   //1
println("~5" = + (~5))  //-6
println("4<<2 =" + (4<<2) ) //16
println("4>>2 =" + (4>>2) )  //1

运算符的优先级(基本规则

1.乘除>加减 2. 算术 > 关系 > 赋值 3.  && >||

浮点数精数问题

由于精度的问题,小数的计算会存在误差 解决方案:使用BigDecimal()函数。

def main(args: Array[String]): Unit = {
  val a = 0.1
  val b = 0.2
  val c = 0.3
  println(a+b==c)//false
println(BigDecimal(a) + BigDecimal(b) == BigDecimal(c))

大数问题

Int类型的最大值是2147483647,一旦超过了这个范围就会报错,或者是导致计算异常。

def main(args: Array[String]): Unit = {
  //大数问题
  val a = 2147483647
  val b = 1
  //a和b都是Int类型,所以a+b的结果也是Int类型
  //Int类型的最大值是2147483647
  //计算它们的平均数
//  var c =(a+b)/2 //
  var c =a-(a-b)/2
  println(c)
  val a1 =BigInt("12345678901234567890")
  val b1 =BigInt("12345678901234567890")
  println(a1+b1)
  println(a1*b1)
}