Scala的运算符

110 阅读4分钟

算术运算符

%:计算余数。5%2就是5除以2的余数,5%2=1

 //算术运算符
 //false true
//数据类型。7:Int
//        4:Int
//       7/4结果是Int
println(7/4) //7/4=1
println(7/4.0)//结果是1.75
println(7%4)//3
//判断奇数还是偶数?
//3%2==1
//4%2==0
println(7-4)//3
println(7+4)//11
println(7*4)//28

注意: 7/4=17/4.0=1.75 原因:7,4都是Int(整数),所以结果也是Int。4.0是Double(浮点),所以结果是Double

关系运算符

关系运算符: > ,< ,==, >=, <=,!=

  val  a:Boolean=1>2
    println(a)
    println(7==4)//false
    println(7>4)//true
    println(7!=4)//true
    println(7<4)//false
    println(7>4)//true
    println(7<=4)//false

逻辑运算符

逻辑运算符:&&,||,!

    //逻辑运算符:
    // &&(并且)全部为true=====>true
    //||(或者)有一个为true=====>true
    // !(非)
      //   println(1>2 && 3>4)
     //   println(2>1 && 4>3)

    println(1>2 || 3>4 ||5>6)//false
    println(2>1 || 4>3)//true

    println(!(1>2))//true

练习:判断是否为闰年 判断一个年份是否是闰年 根据国际标准,一个年份满足如下条件满足任意一个: (1)能够被 4 整除,并且不能被 100 整除的年份是闰年。 (2)能够被 400 整除的年份同样也是闰年。 示例代码如下:

object day10 {
  def main(args: Array[String]): Unit = {
    //判断闰年
    /*1.让用户输入一个整数,表示年份
      2.判断这个年份是否是闰年
      3.输出结果
    */
    val year:Int=scala.io.StdIn.readInt()
    //2000==闰年
    //2024==闰年
    //2025==闰年
    //1900==不是闰年
    //如果定义一个变量,并且之后不打算修改它的值,那么建议使用val
    var result:Boolean=(year %4==0 && year%100!=0 )||(year %400==0)
      if(result){
      println(s"$year 是闰年")
    }else{
      println(s"$year 不是闰年")
    }
  }
}

赋值运算符

1.= 简单的赋值运算,指定将右边操作数赋值给左边的操作数

2.+= 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数

3.-= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数

4.*= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数

5./= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数

6.%= 求余后再赋值,将左右两边的操作数进行求余操作后再赋值给左边的操作数 示例代码:

  //赋值运算符:
    var a=1//把右边的计算结果保存到左边的变量

    a+=2//+= 等价于 a=a+2
    println(a) //a=3
    a-=3//-= 等价于 a=a-3
    println(a)//a=-2
    a*=3//*= 等价于 a=a*3
    println(a)//a=3
    a/=4// /=等价于 a=a/4
    println(a)//a=0
    a%=5// %=等价于 a=a%5
    println(a)//a=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.>> 右移运算符。左边补零,缩小。

10进制转成2进制(除取余)

image.png

示例代码如下:

    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

运算符的优先级

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

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

3.&& > ||

示例代码如下:

val result = 10 - 2 + 3 * 4 / 2
println (result) // 问题 1===>14
val a = true
val b = false
val c = false
println (a || b && c) // 问题 2===>true

浮点数精度

0.1 + 0.2 == 0.3 // false

为false的原因:由于精度的问题,小数的计算会存在误差(可能结果为0.300001,或0.30001,.....)

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

示例代码:

   println(BigDecimal(0.1) + BigDecimal(0.2) == BigDecimal(0.3))//结果为true

大数问题

一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,一旦超过了这个范围就会报错,或者是导致计算异常。 示例代码:

//一个字符串,表示数字的字符串      
var a=BigInt("11111111111111111111111111")
var b=BigInt("11111111111111111111111111")
var c=a*b
println(c)