值得高兴的是,我终于回成都了,也有更多时间用来学习了。
上一章记了一下Go语言的基础语法和变量定义,这一章继续探索Go语言的运算符。
基本算术运算
+、-、*、/都是很基本的四则运算方法,分别表示加、减、乘、除,与其他语言没有什么不同,也没有什么特殊的用法,如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package main import ( "fmt" ) func main() { a := 13 b := 14 fmt.Println("a + b =", a+b) fmt.Println("a - b =", a-b) fmt.Println("a * b =", a*b) fmt.Println("a / b =", a/b) } |
得到结果如下:
1 2 3 4 | a + b = 27 a - b = -1 a * b = 182 a / b = 0 |
值得注意的是除法,与Python这种弱类型的语言不同,Go是强类型的语言,所以在处理运算的时候需要注意类型转换的问题。
除了四则运算以外,还有一些在计算机编程语言中常见的运算符,%、++、--,它们分别表示取余、自增、自减。很常用的运算符,就不过多介绍了,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package main import ( "fmt" ) func main() { a := 13 b := 14 fmt.Println("b % a =", b%a) a++ fmt.Println("a++ =", a) b-- fmt.Println("b-- =", b) } |
结果为:
1 2 3 | b % a = 1 a++ = 14 b-- = 13 |
关系运算
除了基本算术运算外,go还支持关系运算符,如下表(其中,A 值为 10,B 值为 20):
运算符 | 用法描述 | 使用例 |
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 | (A == B) 为 False |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 | (A != B) 为 True |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | (A > B) 为 False |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 | (A < B) 为 True |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 | (A >= B) 为 False |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 | (A <= B) 为 True |
在if分支中或是其他需要条件判断的地方会较多使用关系运算符。
逻辑运算符
假定 A 值为 True,B 值为 False,如下表:
运算符 | 用法描述 | 使用例 |
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 | (A && B) 为 False |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 | (A || B) 为 True |
! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 | !(A && B) 为 True |
也是计算机编程中常用的运算符,就不过多说明了。不过说到逻辑运算符,我打算新开一个系列,介绍从最基础的逻辑门开始搭建一台图灵完备的计算机。不过现在挖的坑似乎有点多了,所以这个系列暂时不急。
与逻辑运算符类似的,还有位运算符,可以看作是对数据中每一位的逻辑运算,如下表:
p | q | p & q | p | q | p ^ q |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
还有对于位操作的左移、右移运算,分别为<<、>>,与C语言和其他大多数语言中的位移操作一样。
赋值运算
上述运算符中除了++、--、&&、||、!这些运算符以外,均可在原运算符后加等号进行赋值运算,如+=、-=等分别表示相加后赋值和相减后赋值,这种操作在其他大多数语言中也都有,所以不再额外介绍。
指针运算
与C/C++/Rust类似,在Go中进行指针运算有两个运算符,分别为&和*。其作用(表示)分别为获取变量存储地址和指针变量,这一点在后面介绍指针的时候再详细说明。