(实践)Go 语言入门指南:基础语法和常用特性解析(二)| 青训营

135 阅读4分钟

第四部分 运算符

  • 运算符用于执行各种数学和逻辑操作。
  1. 算术运算符:

    • 加法运算符:+
    • 减法运算符:-
    • 乘法运算符:*
    • 除法运算符:/
    • 取余运算符:%
    • 自增运算符:++
    • 自减运算符:-- 示例:
a := 10
b := 3

// 加法运算符
c := a + b  // c的值为13

// 减法运算符
d := a - b  // d的值为7

// 乘法运算符
e := a * b  // e的值为30

// 除法运算符
f := a / b  // f的值为3

// 取余运算符
g := a % b  // g的值为1

// 自增运算符
a++         // 现在a的值为11

// 自减运算符
b--         // 现在b的值为2
  1. 关系运算符:

    • 相等运算符:==
    • 不等运算符:!=
    • 大于运算符:>
    • 小于运算符:<
    • 大于等于运算符:>=
    • 小于等于运算符:<= 示例:
a := 5
b := 8

// 相等运算符
c := (a == b)  // c的值为false

// 不等运算符
d := (a != b)  // d的值为true

// 大于运算符
e := (a > b)   // e的值为false

// 小于运算符
f := (a < b)   // f的值为true

// 大于等于运算符
g := (a >= b)  // g的值为false

// 小于等于运算符
h := (a <= b)  // h的值为true
  1. 逻辑运算符:

    • 逻辑与运算符:&&
    • 逻辑或运算符:||
    • 逻辑非运算符:! 示例:
a := true
b := false

// 逻辑与运算符
c := (a && b)  // c的值为false

// 逻辑或运算符
d := (a || b)  // d的值为true

// 逻辑非运算符
e := !a       // e的值为false
  1. 位运算符:

    • 按位与运算符:&
    • 按位或运算符:|
    • 按位异或运算符:^
    • 左移运算符:<<
    • 右移运算符:>>

示例:

按位与运算符(&):

a := 5       // 二进制表示为 0101
b := 3       // 二进制表示为 0011

c := a & b   // c的值为 0001,转换成十进制为 1

按位或运算符(|):

a := 5       // 二进制表示为 0101
b := 3       // 二进制表示为 0011

c := a | b   // c的值为 0111,转换成十进制为 7
```

按位异或运算符(^):

a := 5       // 二进制表示为 0101
b := 3       // 二进制表示为 0011

c := a ^ b   // c的值为 0110,转换成十进制为 6

左移运算符(<<):

a := 5       // 二进制表示为 0000 0101

b := a << 2  // b的值为 0001 0100,转换成十进制为 20
```

右移运算符(>>):

a := 5       // 二进制表示为 0000 0101

b := a >> 2  // b的值为 0000 0001,转换成十进制为 1

按位取反运算符(^):

a := 5       // 二进制表示为 0000 0101

b := ^a      // b的值为 1111 1010,转换成十进制为 -6
  1. 赋值运算符:

    • 简单赋值运算符:=
    • 加法赋值运算符:+=
    • 减法赋值运算符:-=
    • 乘法赋值运算符:*=
    • 除法赋值运算符:/=
    • 取余赋值运算符:%=
    • 位与赋值运算符:&=
    • 位或赋值运算符:|=
    • 位异或赋值运算符:^=
    • 左移赋值运算符:<<=
    • 右移赋值运算符:>>= 示例:
a := 5

// 简单赋值运算符
b := a     // b的值为5

// 加法赋值运算符
a += 2     // 现在a的值为7

// 减法赋值运算符
a -= 3     // 现在a的值为4

// 乘法赋值运算符
a *= 2     // 现在a的值为8

// 除法赋值运算符
a /= 4     // 现在a的值为2

// 取余赋值运算符
a %= 3     // 现在a的值为2

6.运算符优先级

  • 常见的Go语言运算符优先级从高到低的顺序:
  1. 括号:()(括号用于控制表达式的执行顺序)
  2. 单目运算符:+-!^(正负号、逻辑非、按位取反)
  3. 算术运算符:*/%
  4. 位运算符:<<>>&&^|^
  5. 加法和减法运算符:+-
  6. 比较运算符:==!=<<=>>=
  7. 逻辑运算符:&&||
  8. 赋值运算符:= 其他赋值运算符如 +=-=*=/=%=<<=>>=&=&^=|=^= 等,它们的优先级与相应的算术或位运算符相同。

需要注意的是,具有相同优先级的运算符将按照从左到右的顺序进行计算。

下面是一个示例:

a := 5 + 3*2 // a的值为11,先计算乘法,再计算加法

b := (5 + 3) * 2 // b的值为16,括号优先级最高

c := 8 / 4 * 2 // c的值为4,先计算除法,再计算乘法

d := 10 % 3 + 2 // d的值为3,先计算取余,再计算加法

e := 6 > 4 && 3 < 5 // e的值为true,先计算逻辑与,再计算比较

f := 2 << 3 // f的值为16,左移操作

g := 20 &^ 7 // g的值为16,按位清零操作

个人思考

在学习运算符的过程中,我觉得首先了解各种运算符的优先级是很重要的,它们会影响表达式的计算顺序。正确理解优先级有助于编写清晰、可预测的代码。其次,每个运算符都有其特定的功能和用途,对于算术运算符,需要明白加法、减法、乘法、除法等的使用场景;位运算符对于处理二进制数据非常有用;逻辑运算符可以进行布尔值的操作等等。 通过深入了解每个运算符的功能和特性,利用它们解决问题,对于我们编写可读性高和逻辑性强的代码很有价值。

希望这些感悟对大家有所帮助!