第二章:揭开Kotlin的基础面纱(三)

前言:在三月份的时候,打算写一本关于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。

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180506G09D0800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券