算术运算符 #

一、运算符概述 #

Go语言支持以下算术运算符:

运算符 说明 示例
+ 加法 a + b
- 减法 a - b
* 乘法 a * b
/ 除法 a / b
% 取余 a % b
++ 自增 a++
自减 a–

二、基本运算 #

2.1 加法运算 #

go
a := 10
b := 3
fmt.Println(a + b)  // 13

// 字符串拼接
s1 := "Hello"
s2 := "World"
fmt.Println(s1 + " " + s2)  // Hello World

2.2 减法运算 #

go
a := 10
b := 3
fmt.Println(a - b)  // 7

2.3 乘法运算 #

go
a := 10
b := 3
fmt.Println(a * b)  // 30

2.4 除法运算 #

整数除法:

go
a := 10
b := 3
fmt.Println(a / b)  // 3(整数除法,截断小数)

浮点除法:

go
a := 10.0
b := 3.0
fmt.Println(a / b)  // 3.3333333333333335

2.5 取余运算 #

go
a := 10
b := 3
fmt.Println(a % b)  // 1

// 判断奇偶
n := 7
if n%2 == 0 {
    fmt.Println("偶数")
} else {
    fmt.Println("奇数")
}

取余运算规则:

  • 结果符号与被除数相同
  • 只适用于整数
go
fmt.Println(10 % 3)   // 1
fmt.Println(-10 % 3)  // -1
fmt.Println(10 % -3)  // 1

三、自增自减 #

3.1 自增运算 #

go
a := 10
a++
fmt.Println(a)  // 11

3.2 自减运算 #

go
a := 10
a--
fmt.Println(a)  // 9

3.3 注意事项 #

Go的自增自减是语句,不是表达式:

go
a := 10

// 错误:不能作为表达式使用
b := a++  // 编译错误

// 错误:不能前置
++a       // 编译错误
--a       // 编译错误

// 正确:单独使用
a++

四、运算规则 #

4.1 类型必须一致 #

go
var a int = 10
var b int32 = 3

fmt.Println(a + b)  // 错误:类型不匹配
fmt.Println(a + int(b))  // 正确:需要转换

4.2 整数除法 #

go
a := 10
b := 3
result := a / b
fmt.Println(result)        // 3
fmt.Println(float64(a) / float64(b))  // 3.333...

4.3 溢出处理 #

go
var a int8 = 127
a = a + 1  // -128(溢出回绕)

// 检查溢出
func safeAdd(a, b int) (int, bool) {
    if b > 0 && a > math.MaxInt-b {
        return 0, false
    }
    if b < 0 && a < math.MinInt-b {
        return 0, false
    }
    return a + b, true
}

五、复合运算 #

5.1 复合赋值 #

go
a := 10

a += 5   // a = a + 5   → 15
a -= 3   // a = a - 3   → 12
a *= 2   // a = a * 2   → 24
a /= 4   // a = a / 4   → 6
a %= 4   // a = a % 4   → 2

5.2 运算顺序 #

go
result := 2 + 3 * 4  // 14(先乘后加)
result := (2 + 3) * 4  // 20(括号优先)

六、实际应用 #

6.1 计算平均值 #

go
func average(numbers []int) float64 {
    sum := 0
    for _, n := range numbers {
        sum += n
    }
    return float64(sum) / float64(len(numbers))
}

fmt.Println(average([]int{1, 2, 3, 4, 5}))  // 3

6.2 时间计算 #

go
seconds := 3725
hours := seconds / 3600
minutes := (seconds % 3600) / 60
secs := seconds % 60

fmt.Printf("%d:%02d:%02d\n", hours, minutes, secs)  // 1:02:05

6.3 数字反转 #

go
func reverse(n int) int {
    result := 0
    for n > 0 {
        result = result*10 + n%10
        n /= 10
    }
    return result
}

fmt.Println(reverse(12345))  // 54321

6.4 判断水仙花数 #

go
func isNarcissistic(n int) bool {
    original := n
    sum := 0
    for n > 0 {
        digit := n % 10
        sum += digit * digit * digit
        n /= 10
    }
    return sum == original
}

fmt.Println(isNarcissistic(153))  // true

七、常见错误 #

7.1 整数除法精度丢失 #

go
a := 1
b := 3
fmt.Println(a / b)  // 0,不是 0.333...

// 正确做法
fmt.Println(float64(a) / float64(b))  // 0.333...

7.2 除零错误 #

go
a := 10
b := 0
fmt.Println(a / b)  // panic: runtime error

// 浮点除零
x := 10.0
y := 0.0
fmt.Println(x / y)  // +Inf

7.3 类型不匹配 #

go
var a int = 10
var b int32 = 5
fmt.Println(a + b)  // 错误

// 解决
fmt.Println(a + int(b))

八、总结 #

算术运算符要点:

运算符 说明 示例
+ 加法/字符串拼接 1 + 2, “a” + “b”
- 减法 3 - 1
* 乘法 2 * 3
/ 除法 6 / 2
% 取余(仅整数) 7 % 3
++ 自增(仅后置) a++
自减(仅后置) a–

关键点:

  1. 整数除法:结果为整数,截断小数
  2. 取余:只适用于整数
  3. 自增自减:是语句,不是表达式
  4. 类型一致:运算数类型必须相同
  5. 溢出:注意整数溢出问题

准备好学习关系运算符了吗?让我们进入下一章!

最后更新:2026-03-26