当前位置:  首页>> 技术小册>> Go语言从入门到实战

运算符章节内容

引言

在编程的世界中,运算符是构建程序逻辑不可或缺的基础工具。它们如同数学中的符号,用于执行数据的算术运算、比较、逻辑操作以及赋值等。对于学习Go语言(常简称为Golang)的开发者而言,掌握各种运算符的使用是通往高效编程的重要一步。本章将深入介绍Go语言中的运算符,包括算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、复合赋值运算符以及特殊运算符,帮助读者从理论到实践全面理解并灵活运用这些工具。

1. 算术运算符

算术运算符用于执行基本的数学运算,如加、减、乘、除等。Go语言支持以下算术运算符:

  • 加法 (+): 用于将两个数值相加。
  • 减法 (-): 用于从一个数值中减去另一个数值。
  • 乘法 (*): 用于将两个数值相乘。
  • 除法 (/): 用于将第一个数值除以第二个数值,结果为浮点数(如果操作数中有浮点数)或整数(如果操作数均为整数且能整除)。
  • 模运算符 (%): 也称为取余运算符,用于求两个数相除后的余数。

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a := 10
  5. b := 3
  6. fmt.Println("a + b =", a+b) // 加法
  7. fmt.Println("a - b =", a-b) // 减法
  8. fmt.Println("a * b =", a*b) // 乘法
  9. fmt.Println("a / b =", a/b) // 除法(整数除法)
  10. fmt.Println("a % b =", a%b) // 取余
  11. }

2. 比较运算符

比较运算符用于比较两个值的大小关系,返回布尔值(truefalse)。Go语言中的比较运算符包括:

  • 等于 (==): 判断两边是否相等。
  • 不等于 (!=): 判断两边是否不相等。
  • 大于 (>): 判断左边是否大于右边。
  • 小于 (<): 判断左边是否小于右边。
  • 大于等于 (>=): 判断左边是否大于或等于右边。
  • 小于等于 (<=): 判断左边是否小于或等于右边。

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. x := 5
  5. y := 3
  6. fmt.Println(x == y) // false
  7. fmt.Println(x != y) // true
  8. fmt.Println(x > y) // true
  9. fmt.Println(x < y) // false
  10. fmt.Println(x >= y) // true
  11. fmt.Println(x <= y) // false
  12. }

3. 逻辑运算符

逻辑运算符用于根据一个或多个条件的布尔值来执行逻辑操作。Go语言支持以下逻辑运算符:

  • 逻辑与 (&&): 仅当两边都为true时,结果为true
  • 逻辑或 (||): 当两边中至少有一个为true时,结果为true
  • 逻辑非 (!): 对布尔值取反,true变为falsefalse变为true

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a := true
  5. b := false
  6. fmt.Println(a && b) // false
  7. fmt.Println(a || b) // true
  8. fmt.Println(!a) // false
  9. }

4. 位运算符

位运算符用于对整数的二进制位进行操作。Go语言支持以下位运算符:

  • 位与 (&): 对两个数的每一位执行AND操作。
  • 位或 (|): 对两个数的每一位执行OR操作。
  • 位异或 (^): 对两个数的每一位执行XOR(异或)操作。
  • 位取反 (^ 单独使用时): 对数的每一位取反。
  • 左移 (<<): 将数的二进制表示向左移动指定位数,右边超出的位被丢弃,左边超出的部分用0填充。
  • 右移 (>>): 将数的二进制表示向右移动指定位数,对于无符号数,左边超出的部分用0填充;对于有符号数,行为可能依赖于具体的实现(通常是算术右移,即用符号位填充左边超出的部分)。

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a := 60 // 二进制表示为 0011 1100
  5. b := 13 // 二进制表示为 0000 1101
  6. fmt.Println(a & b) // 12 (0000 1100)
  7. fmt.Println(a | b) // 61 (0011 1101)
  8. fmt.Println(a ^ b) // 49 (0011 0001)
  9. fmt.Println(^a) // -61 (二进制表示依赖于整数类型的大小和是否有符号,这里假设为32位有符号整数)
  10. fmt.Println(a << 2) // 240 (1111 0000)
  11. fmt.Println(a >> 2) // 15 (0000 1111)
  12. }

注意:位取反(^ 单独使用时)的示例中,-61是基于假设整数为32位有符号整数的结果,实际输出可能因编译器和整数类型的不同而有所差异。

5. 赋值运算符

赋值运算符用于将右侧的值赋给左侧的变量。Go语言中,最基本的赋值运算符是单个等号(=)。

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var x int
  5. x = 10
  6. fmt.Println(x) // 输出 10
  7. }

6. 复合赋值运算符

复合赋值运算符结合了算术或位运算符与赋值运算符的功能,使得代码更加简洁。例如,+= 是加法与赋值的复合,&= 是位与与赋值的复合等。

示例代码:

  1. package main
  2. import "fmt"
  3. func main() {
  4. a := 5
  5. a += 3 // 等同于 a = a + 3
  6. fmt.Println(a) // 输出 8
  7. b := 60
  8. b &= 13 // 等同于 b = b & 13
  9. fmt.Println(b) // 输出 12
  10. }

7. 特殊运算符

除了上述几类运算符外,Go语言还包含一些特殊运算符,如指针运算符(*&,但在此上下文中它们用于地址和间接引用,不同于算术和位运算符中的用法)、通道运算符(<-,用于从通道接收值或向通道发送值)等,这些运算符在特定场景下发挥重要作用,但通常不被归类为传统意义上的运算符。

结语

通过本章的学习,我们全面了解了Go语言中的各类运算符,包括算术、比较、逻辑、位、赋值以及复合赋值运算符。这些运算符是构建程序逻辑的基础,掌握它们对于提高编程效率和编写高质量代码至关重要。希望读者能够通过实践加深对这些运算符的理解,并在实际编程中灵活运用。


该分类下的相关小册推荐: