位运算符,运算符的优先级,浮点数精度问题,if语句

62 阅读2分钟

scala的位运算符

1·十进制转化二进制

屏幕截图 2025-09-17 084545.png

2· & 按位与运算符。0&1 = 0,  1&0= 0 , 0&0 = 0, 1&1 =1

同1为1,否则为0

屏幕截图 2025-09-17 085251.png

3·| 按位或运算符。0|1 = 1,  1|0= 1 , 0|0 = 0, 1|1 = 1

有1为1,否则为0

屏幕截图 2025-09-17 085216.png

Scala中运算符的优先级

‌1·确定逻辑运算符优先级:逻辑与(&&)的优先级高于逻辑或(||),因此先计算 b && c,再与 a 进行 || 运算 "&&>||"

val a = true
val b = false
val c = false
println(a || b && c)
//答案true

2. 乘(*)除(/)模(%) > 加(+)减(-)

3. 算术(+-*/%) > 关系(><>=!=) > 赋值(=)

浮点数精度问题

0.1 + 0.2 == 0.3 ?

0.1 + 0.2 == 0.3 // false

由于精度的问题,小数的计算会存在误差

解决方案:使用BigDecimal()函数

println(BigDecimal(0.1) + BigDecimal(0.2)==BigDecimal(0.3))

大数问题

object w02 {
  def main(args: Array[String]): Unit = {
    val a =2147483647
    val b=1
   // val c =(a+b)/2 bug
    val c = a - (a-b)/2
    println(c)
    //大数字做计算
    //11111111111111111111111*222222222222222222222222222
    val d =BigInt("11111111111111111111111") * BigInt("222222222222222222222222222")
    println(d)
  }
}

if语句

object w03 {
  def main(args: Array[String]): Unit = {
    println("请输入年龄:")
    val age = scala.io.StdIn.readInt()
    if (age >= 18)
      println("成年")
    else
      println("未成年")
  }

}

练习

object w04 {
  def main(args: Array[String]): Unit = {
    print("输入正方形的边长a")
    val a =scala.io.StdIn.readInt()
    print("长方形长b")
    val b =scala.io.StdIn.readInt()
    print("长方形宽c")
    val c =scala.io.StdIn.readInt()
    if (b*c > a*a) {
      println("长方形面积大")
    }else if(b*c<a*a){
      println("正方形面积大")
    }
    else
      println("一样大")
  }

}
object w05 {
 def main(args: Array[String]): Unit = {
   print("输入一个正整数")
   val a =scala.io.StdIn.readInt()
   if (90 <= a && a <= 100) {
     println("A")
   } else if (80 <= a && a <= 89) {
     println("B")
   } else if (70 <= a && a <= 79) {
     println("C")
   } else if (60 <= a && a <= 69) {
     println("D")
   } else if (0 <= a && a <= 59) {
     println("E")
   } else {
     println("输入分数有误")
     }
   
 }
}