Go微服务实战
上QQ阅读APP看书,第一时间看更新

2.1.2 运算符

Go语言里面的数值运算符包括二元运算符、一元运算符。

1. 二元运算符

二元运算符包括算术运算、逻辑运算和比较运算,运算符优先级按从上到下的递减顺序排列:


*      /     %     <<     >>     &     &^
+      -     |     ^
==     !=    <     <=     >      >=
&&
||

在同一个优先级中,使用的是左优先结合规则,如有特殊,可使用括号明确优先顺序。

算术运算符“+”“-”“*”和“/”适用于整型、浮点型和复数,但是取模运算符“%”仅用于整型间的运算。取模运算符的符号和被取模数的符号总是一致的。除法运算符“/”的行为则依赖于操作数的类型,比如5.0/4.0的结果是1.25,但是5/4的结果是1,因为整数除法会向着0的方向截断余数。

两个相同的整数类型可以使用下面的二元比较运算符进行比较,比较表达式的结果是布尔类型。


==    equal to
!=     not equal to
<     less than
<=    less than or equal to
>     greater than
>=    greater than or equal to

如果算术运算的结果过大,就会出现溢出现象,无论有无符号,超出高位的bit位部分将被丢弃。如果原始的数值是有符号类型,数值的正负号可能会出现变化。

布尔型、数字类型和字符串等基本类型都是可比较的,也就是说两个相同类型的值可以用“==”和“!=”进行比较。

2. 一元运算符

一元运算符包括一元加法运算符、一元减法运算符、bit位操作运算符。

一元加法运算符和一元减法运算符如下:

+ 一元加法(无效果)

- 负数

bit位操作运算符见表2-2。

表2-2 位操作运算符

位操作运算符“&^”用于按位清空(AND NOT):对于表达式z = x &^ y,如果对应y中某bit位为0,那么结果z对应的bit位等于x相应的bit位的值,否则z对应的bit位为0。

移位运算符“<<”和“>>”的含义及说明见表2-3,其中x << n 和x >> n的右操作数(n)必须为无符号数。

表2-3 移位运算符