算数运算符

46 阅读4分钟

Scala中的运算符

1.算术运算符

 / :取余数 % :除

eg:

var a = 1234
// 在()内使用算数运算对a进行操作,以便输出对应结果
println(a/1000)  //1
println(a/100%10)  //2
println((a%100)/10)  //3
println(a%10)  //4

2.关系运算符

==: 等于

!=: 不等于

> :大于

< :小于

>=:大于等于

<=:小于等于

eg:

var b: Boolean=1==1

println(b)      //输出为true
println(1 !=2)  //输出为true
println(1>2)    //输出为false
println(1<2)    //输出为true
println(2>=2)   //输出为true
println(2<=2)   //输出为true

eg:

3.逻辑运算符

与:&& 运算表达式有一个为假,则整个表达式为假

或:|| 运算表达式有一个为真,则整个表达式为真

非:! 就是取反的意思,与参与表达式相反

eg:

println(3<5||5>3) //true
println(3<5||5>3) //true
println(!(2>1))   //false

scala的短路运算

运算法则:result=表达式1 运算符 表达式2

运算符为&&时:如果表达式1为false,则result=false,也就是说此时表达式1能够决定整个与运算的值,因此不会再去求表达式2的值

eg:

def f():Boolean={
  println("f")
  false
}
1 > 2 && f()
//false
2 > 1 && f()

运算符为||时:如果表达式1为true,则result=true,也就是说此时表达式1能够决定整个或运算的值,因此不会再去求表达式2的值。

eg:

def f():Boolean={
    println("f")
    false
  }
 // 1 > 2 && f()
  //false
//  2 > 1 && f()

  
  2>1||f()

scala的位运算符

注:需要二进制基础 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.>> 右移运算符。左边补零,缩小

eg:

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("5 - 4="+(5-4))  //1
println("4 >> 2="+(4>>2))  //1
println("4 << 2="+(4<<2))  //16

scala的运算优先级

基本规则:

1. 乘除模 > 加减

2. 算术 > 关系 > 赋值

3. && >

记不清楚可以用()来调整

eg:

val  a =true
val b =false
val c =false
println(a || b && c)
println(a || (b && c))
//先算&&,后算|| ===>  true
println((a || b) && c) //false

scala的自增和自减运算

注:在scala中没有++和--这样的自增和自减运算符,需要用其他运算符进行替代

++: +=1

--:-+1

scala浮点精度问题

val a =0.1
val b =0.2
val c =0.3

println(a + b ==c)  //false否
//因为计算机精度问题存在误差,a+b不等于c

//使用BigDecimal()函数可以解决,true
println(BigDecimal(a) + BigDecimal(b) == BigDecimal(c))

scala的大数问题

一种整数都有自己的表达范围,例如Int类型的最大值是2147483647,超过了范围就会报错,或导致异常。

eg:

var a =2147483647
var b =1

println(a+b)

//ab都是INt类型,所以a+b结果也是INt类型
//INt类型最大值是2147483647
2147483647+1=-2147483648

eg2:

//计算他们的平均数
var c =(a+b)/2  //a,-2147483648
var c1=a-(a-b)/2 //1073741824
println(c)

可以使用用BigInt(数字字符串)来解决这个问题 eg:

val a1=BigInt("123456789012345678901234567890") //1111111110111111111011111111100
val b1=BigInt("987654321098765432109876543210") //121932631137021795226185032733622923332237463801111263526900
println(a1+b1)
println(a1*b1)