文章目录
- 一、算术运算符:做数学计算
- 二、关系运算符:比较两个值的关系
- 三、逻辑运算符:组合布尔条件
- 四、位运算符:操作二进制位
- 五、赋值运算符:给变量赋值
- 六、其他运算符:取地址与解引用
- 1. 取地址运算符(`&`)
- 2. 解引用运算符(`*`)
- 七、运算符优先级:决定计算顺序
一、算术运算符:做数学计算
作用:对数值类型(整型、浮点型等)进行数学运算,类似日常的加减乘除。
运算符与示例:
| 运算符 | 含义 | 示例 | 结果说明 |
|---|---|---|---|
+ | 加法 | 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不能直接相加:varaint=10varbfloat64=20.5c:=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:=18ifage>=18{fmt.Println("成年")// 输出:成年}else{fmt.Println("未成年")}三、逻辑运算符:组合布尔条件
作用:对布尔值进行逻辑运算,用于组合多个条件判断。
运算符与示例:
| 运算符 | 含义 | 示例 | 结果说明 |
|---|---|---|---|
&& | 逻辑与(AND) | true && false | false(必须两边都为真) |
|| | 逻辑或(OR) | true || false | true(只要一边为真) |
! | 逻辑非(NOT) | !true | false(取反) |
示例:组合条件
score:=85isMale:=trueifscore>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 |
示例:复合赋值简化代码
varcountint=5count+=3// 等价于 count = count + 3 → count 变为 8count*=2// 等价于 count = count * 2 → count 变为 16六、其他运算符:取地址与解引用
1. 取地址运算符(&)
作用:获取变量的内存地址(指针)。
示例:
varnumint=10addr:=&num// 获取 num 的地址,addr 是 *int 类型fmt.Println(addr)// 输出地址(如 0xc00001a0b8)2. 解引用运算符(*)
作用:通过指针访问其指向的值。
示例:
varnumint=10ptr:=&num// ptr 指向 num 的地址*ptr=20// 通过指针修改 num 的值;todo:不带*可以吗fmt.Println(num)// 输出 20七、运算符优先级:决定计算顺序
运算符优先级决定表达式中不同运算的执行顺序(优先级高的先算),如下:
算术 > 关系 > 逻辑 > 赋值
- 高优先级:
*、/、%、<<、>>、&、^、|- 中优先级:
+、-- 低优先级:
==、!=、>、<、>=、<=、&&、||、赋值运算符
示例:优先级影响结果
a:=5+3*2// 先算乘法 3*2=6,再算加法 5+6=11b:=(5+3)*2// 括号提升优先级,先算加法 5+3=8,再算乘法 8*2=16