跳到主要内容

运算符

一个程序的最小单位是一条语句,一条语句最少包含一条指令,而指令就是对数据做运算,我们已经学完基本数据类型了,知道如何构建和使用一些最简单的数据,那么我们能对这些数据做什么运算呢,比如fmt.Println(1+1)这条语句包含两个指令,首先是计算1+1的指令,1就是数据,+就是算术运算符中的相加,这样计算机就可以帮我们执行这个指令计算出结果,然后执行第二个指令,即将计算结果2打印在终端,最终完成这条语句。

5.1、算数运算符

| 运算符 | 描述 |

| :----- | :--- |

| + | 相加 |

| - | 相减 |

| * | 相乘 |

| / | 相除 |

| % | 求余 |

提示

如何判断一个整型数字是奇数还是偶数?

5.2、关系运算符

| 运算符 | 描述 |

| :----- | :----------------------------------------------------------- |

| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |

| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |

| > | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |

| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |

| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |

| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |

5.3、逻辑运算符

| 运算符 | 描述 |

| :----- | :----------------------------------------------------------- |

| && | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 |

| || | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 |

| ! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 |

     fmt.Println(2.1 > 1 || 3 == 2)

// 用户名为root或者年龄大于18岁

username := "root"
age := 16

ret := username == "root" || !(age < 18)
fmt.Println(ret)

5.4、赋值运算符

| 运算符 | 描述 |

| :----- | :--------------------------------------------- |

| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 |

| += | 相加后再赋值 |

| -= | 相减后再赋值 |

| *= | 相乘后再赋值 |

| /= | 相除后再赋值 |

| %= | 求余后再赋值 |

| <<= | 左移后赋值 |

| >>= | 右移后赋值 |

| &= | 按位与后赋值 |

| ^= | 按位异或后赋值 |

| |= | 按位或后赋值 |

| ++ | 自增 |

| :--- | :--- |

| -- | 自减 |

     var a = 10

// 使a自加1
ret := a + 1
a = ret

// 使a自加1
a = a + 1

// 使a自加1
a += 1 // 赋值元算符

// 使a自加1
a++ // 注意:不能写成 ++ a 或 -- a 必须放在右边使用

// b := a++ // 此处为错误的用法,不能写在一行,要单独作为语句使用
fmt.Println(a)

5.5、运算符优先级

image-20210625132209344

    // 案例1
var a, b, c, d = 8, 6, 4, 2

ret := a + b*c/d
fmt.Println(ret)

// 案例2
x := 10

y := 1
x += 5*(1+2) + y
fmt.Println(x)

z := 1+2 > 3 || 1 == 1*5
fmt.Println(z)

提示

为什么x = 1+1, 为什么先计算后赋值:运算符的优先级