文章目录
一、算术运算符:做数学计算
作用:对数值类型(整型、浮点型等)进行数学运算,类似日常的加减乘除。
运算符与示例:
运算符 | 含义 | 示例 | 结果说明 |
---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 10 - 4 |
6 |
* |
乘法 | 3 * 2 |
6 |
/ |
除法 | 10 / 3 |
3 (整数除法取整) |
% |
取余(模运算) | 10 % 3 |
1 (10 除以 3 余 1) |
++ |
自增 | a := 2; a++ |
a 变为 3 |
-- |
自减 | b := 5; b-- |
b 变为 4 |
注意事项:
- 类型必须一致:
不能混合不同类型运算,例如int
和float64
不能直接相加:var a int = 10 var b float64 = 20.5 c := a + b // 报错!需显式转换类型:float64(a) + b
- 整数除法的特性:
整数相除结果为整数,会直接丢弃小数部分:fmt.Println(5 / 2) // 输出 2(非 2.5)
- 自增/自减只能作为语句:
不能在表达式中使用(如print(a++)
),只能单独写为a++
或a--
。
二、关系运算符:比较两个值的关系
作用:比较两个值的大小、是否相等,结果为布尔值(true
或 false
),常用于条件判断(如 if
语句)。
运算符与示例:
运算符 | 含义 | 示例 | 结果说明 |
---|---|---|---|
== |
等于 | "go" == "go" |
true |
!= |
不等于 | 5 != 3 |
true |
> |
大于 | 10 > 5 |
true |
>= |
大于等于 | 3 >= 3 |
true |
< |
小于 | 2 < 8 |
true |
<= |
小于等于 | 5 <= 10 |
true |
示例:条件判断
age := 18
if age >= 18 {
fmt.Println("成年") // 输出:成年
} else {
fmt.Println("未成年")
}
三、逻辑运算符:组合布尔条件
作用:对布尔值进行逻辑运算,用于组合多个条件判断。
运算符与示例:
运算符 | 含义 | 示例 | 结果说明 |
---|---|---|---|
&& |
逻辑与(AND) | true && false |
false (必须两边都为真) |
|| |
逻辑或(OR) | true || false |
true (只要一边为真) |
! |
逻辑非(NOT) | !true |
false (取反) |
示例:组合条件
score := 85
isMale := true
if score > 80 && isMale { // 同时满足分数>80且是男性
fmt.Println("符合条件") // 输出:符合条件
}
四、位运算符:操作二进制位
作用:对整数的二进制位进行运算,常用于底层开发、加密、协议解析等场景。
运算符与示例(以 a=60
(二进制 0011 1100
)和 b=13
(二进制 0000 1101
)为例):
运算符 | 含义 | 二进制运算示例 | 结果(十进制) |
---|---|---|---|
& |
按位与 | a & b → 0000 1100 |
12 |
| |
按位或 | a | b → 0011 1101 |
61 |
^ |
按位异或 | a ^ b → 0011 0001 |
49 |
<< |
左移 | a << 2 → 1111 0000 |
240 |
>> |
右移 | a >> 2 → 0000 1111 |
15 |
应用场景:
- 按位与(
&
):提取特定位(如num & 1
判断奇偶性,结果为1
是奇数,0
是偶数)。- 左移(
<<
):快速计算乘法(左移n
位相当于乘以2^n
,如3 << 2 = 3*4=12
)。- 右移(
>>
):快速计算除法(右移n
位相当于除以2^n
,如8 >> 2 = 8/4=2
)。
五、赋值运算符:给变量赋值
作用:将右侧的值赋给左侧变量,支持复合运算(简化代码)。
运算符与示例:
运算符 | 含义 | 等价写法 | 示例 |
---|---|---|---|
= |
简单赋值 | a = b |
var a = 10 |
+= |
加后赋值 | a = a + b |
a += 5 → a = a + 5 |
-= |
减后赋值 | a = a - b |
b -= 3 → b = b - 3 |
*= |
乘后赋值 | a = a * b |
c *= 2 → c = c * 2 |
/= |
除后赋值 | a = a / b |
d /= 4 → d = d / 4 |
%= |
取余后赋值 | a = a % b |
e %= 3 → e = e % 3 |
示例:复合赋值简化代码
var count int = 5
count += 3 // 等价于 count = count + 3 → count 变为 8
count *= 2 // 等价于 count = count * 2 → count 变为 16
六、其他运算符:取地址与解引用
1. 取地址运算符(&
)
作用:获取变量的内存地址(指针)。
示例:
var num int = 10
addr := &num // 获取 num 的地址,addr 是 *int 类型
fmt.Println(addr) // 输出地址(如 0xc00001a0b8)
2. 解引用运算符(*
)
作用:通过指针访问其指向的值。
示例:
var num int = 10
ptr := &num // ptr 指向 num 的地址
*ptr = 20 // 通过指针修改 num 的值;todo:不带*可以吗
fmt.Println(num) // 输出 20
七、运算符优先级:决定计算顺序
运算符优先级决定表达式中不同运算的执行顺序(优先级高的先算),如下:
算术 > 关系 > 逻辑 > 赋值
- 高优先级:
*
、/
、%
、<<
、>>
、&
、^
、|
- 中优先级:
+
、-
- 低优先级:
==
、!=
、>
、<
、>=
、<=
、&&
、||
、赋值运算符
示例:优先级影响结果
a := 5 + 3 * 2 // 先算乘法 3*2=6,再算加法 5+6=11
b := (5 + 3) * 2 // 括号提升优先级,先算加法 5+3=8,再算乘法 8*2=16