前言:在三月份的时候,打算写一本关于Kotlin语言的书,名字都起好了,叫《Kotlin进化之路》,发现,写着写着,自己却没有了那个耐性,索性,整理整理,在公众号里更新吧,这是一个系列,请大家跟上脚步~这篇更新的是:
《Kotlin进化之路》之【第二章:揭开Kotlin的基础面纱】(三)
2.2 运算符
2.2.1:算术运算符
算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
举例2.2.1.1:设置两个变量,a=3,b=2,如下表:
代码演示(和表内举例不同):
funmain(args: Array) {
vara:Int =3
varb:Int =2
println("a+b = "+(a+b))
println("a-b = "+(a-b))
println("a*b = "+(a*b))
println("a/b = "+(a/b))
println("a%b = "+(a%b))
println("a++ = "+(a++))
println("a = "+a)
println("++b = "+(++b))
println("a-- = "+(a--))
println("a = "+a)
println("--b = "+(--b))
}
打印结果:
a+b =5
a-b =1
a*b =6
a/b =1
a%b =1
a++ =3
a =4
++b =3
a-- =4
a =3
--b =2
需要解释的是,a/b,是取得商,a%b是取得余数,a++,下一次运算a时才会计算,同样a—也是。
2.2.2:关系运算符
关系运算,学习过其它高级语言的都会多多少少了解到,无非就是大于小于等于之类的,我们看下Kotin关系运算都包含哪些,设置a=3,b=2如下表:
代码演示:
funmain(args: Array) {
vara:Int =3
varb:Int =2
println(a==b)
println(a!=b)
println(a>b)
println(a
println(a>=b)
println(a
}
打印结果:
false
true
true
false
true
false
2.2.3:逻辑运算符
Kotlin的逻辑运算符和Java语言类似,比如我们设置布尔变量a为真,变量b为假,总结可以看下表:
代码演示:
funmain(args: Array) {
vara: Boolean =true
varb: Boolean =false
println(a&&b)
println(a||b)
println(!(a && b))
}
打印结果:
false
true
true
2.2.4:赋值运算符
Kotlin赋值运算符和Java也基本类似,但比Java要少些,具体请看下表:
代码演示:
打印结果:
5
8
5
15
5
2
2.2.5:位运算符
Kotlin中对于按位操作,和Java是有很大的差别的,Kotlin中没有特殊的字符,但是只能命名为可以以中缀形式调用的函数,下列是按位操作的完整列表(仅适用于整形(Int)和长整形(Long)):
Ø shl(bits) => 有符号向左移 (类似Java的
Ø shr(bits) => 有符号向右移 (类似Java的>>)
Ø ushr(bits) => 无符号向右移 (类似Java的>>>)
Ø and(bits) => 位运算符 and (同Java中的按位与)
Ø or(bits) => 位运算符 or (同Java中的按位或)
Ø xor(bits) => 位运算符 xor (同Java中的按位异或)
Ø inv() => 位运算符 按位取反 (同Java中的按位取反)
下面附上Kotlin中关于位操作符的源码:
/** Shifts this value left by[bits]. */
public infix funshl(bitCount: Int): Int
/** Shifts this value right by[bits], filling the leftmost bits with copies of the sign bit. */
public infix funshr(bitCount: Int): Int
/** Shifts this value right by[bits], filling the leftmost bits with zeros. */
public infix funushr(bitCount: Int): Int
/** Performs a bitwise AND operation between the two values. */
public infix funand(other: Int): Int
/** Performs a bitwise OR operation between the two values. */
public infix funor(other: Int): Int
/** Performs a bitwise XOR operation between the two values. */
public infix funxor(other: Int): Int
/** Inverts the bits in this value. */
public funinv(): Int
代码演示:
funmain(args: Array) {
vara: Int =8
varshla = a shl(2)
varshra = a shr(2)
varushra = a ushr(2)
varanda = a and(2)
varora = a or(2)
varxora = a xor(2)
varinva = a.inv()
println("shla =>$shla\n"+
"shra =>$shra\n"+
"ushra =>$ushra\n"+
"anda =>$anda\n"+
"ora =>$ora\n"+
"xora =>$xora\n"+
"inva =>$inva")
}
打印结果:
shla =>32
shra =>2
ushra =>2
anda =>
ora =>10
xora =>10
inva => -9
2.2.6:运算符优先级
当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题,在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。
例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。
再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。
下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部:
领取专属 10元无门槛券
私享最新 技术干货