算术运算符 #
一、运算符概述 #
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– |
关键点:
- 整数除法:结果为整数,截断小数
- 取余:只适用于整数
- 自增自减:是语句,不是表达式
- 类型一致:运算数类型必须相同
- 溢出:注意整数溢出问题
准备好学习关系运算符了吗?让我们进入下一章!
最后更新:2026-03-26