【Go语言基础【5】】运算符基础

文章目录

一、算术运算符:做数学计算

作用 :对数值类型(整型、浮点型等)进行数学运算,类似日常的加减乘除。
运算符与示例

运算符 含义 示例 结果说明
+ 加法 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

注意事项

  1. 类型必须一致
    不能混合不同类型运算,例如 intfloat64 不能直接相加:

    go 复制代码
    var a int = 10
    var b float64 = 20.5
    c := a + b // 报错!需显式转换类型:float64(a) + b
  2. 整数除法的特性
    整数相除结果为整数,会直接丢弃小数部分:

    go 复制代码
    fmt.Println(5 / 2) // 输出 2(非 2.5)
  3. 自增/自减只能作为语句
    不能在表达式中使用(如 print(a++)),只能单独写为 a++a--

二、关系运算符:比较两个值的关系

作用 :比较两个值的大小、是否相等,结果为布尔值(truefalse),常用于条件判断(如 if 语句)。
运算符与示例

运算符 含义 示例 结果说明
== 等于 "go" == "go" true
!= 不等于 5 != 3 true
> 大于 10 > 5 true
>= 大于等于 3 >= 3 true
< 小于 2 < 8 true
<= 小于等于 5 <= 10 true

示例:条件判断

go 复制代码
age := 18
if age >= 18 {
    fmt.Println("成年") // 输出:成年
} else {
    fmt.Println("未成年")
}

三、逻辑运算符:组合布尔条件

作用 :对布尔值进行逻辑运算,用于组合多个条件判断。
运算符与示例

运算符 含义 示例 结果说明
&& 逻辑与(AND) true && false false(必须两边都为真)
` ` 逻辑或(OR)
! 逻辑非(NOT) !true false(取反)

示例:组合条件

go 复制代码
score := 85
isMale := true

if score > 80 && isMale { // 同时满足分数>80且是男性
    fmt.Println("符合条件") // 输出:符合条件
}

四、位运算符:操作二进制位

作用 :对整数的二进制位进行运算,常用于底层开发、加密、协议解析等场景。
运算符与示例(以 a=60(二进制 0011 1100)和 b=13(二进制 0000 1101)为例)

运算符 含义 二进制运算示例 结果(十进制)
& 按位与 a & b0000 1100 12
` ` 按位或 `a
^ 按位异或 a ^ b0011 0001 49
<< 左移 a << 21111 0000 240
>> 右移 a >> 20000 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 += 5a = a + 5
-= 减后赋值 a = a - b b -= 3b = b - 3
*= 乘后赋值 a = a * b c *= 2c = c * 2
/= 除后赋值 a = a / b d /= 4d = d / 4
%= 取余后赋值 a = a % b e %= 3e = e % 3

示例:复合赋值简化代码

go 复制代码
var count int = 5
count += 3 // 等价于 count = count + 3 → count 变为 8
count *= 2 // 等价于 count = count * 2 → count 变为 16

六、其他运算符:取地址与解引用

1. 取地址运算符(&

作用 :获取变量的内存地址(指针)。
示例

go 复制代码
var num int = 10
addr := &num // 获取 num 的地址,addr 是 *int 类型
fmt.Println(addr) // 输出地址(如 0xc00001a0b8)

2. 解引用运算符(*

作用 :通过指针访问其指向的值。
示例

go 复制代码
var num int = 10
ptr := &num       // ptr 指向 num 的地址
*ptr = 20         // 通过指针修改 num 的值;todo:不带*可以吗
fmt.Println(num)  // 输出 20

七、运算符优先级:决定计算顺序

运算符优先级决定表达式中不同运算的执行顺序(优先级高的先算),如下:
算术 > 关系 > 逻辑 > 赋值

  • 高优先级*/%<<>>&^|
  • 中优先级+-
  • 低优先级==!=><>=<=&&||、赋值运算符

示例:优先级影响结果

go 复制代码
a := 5 + 3 * 2 // 先算乘法 3*2=6,再算加法 5+6=11
b := (5 + 3) * 2 // 括号提升优先级,先算加法 5+3=8,再算乘法 8*2=16
相关推荐
why1512 小时前
微服务商城-商品微服务
数据库·后端·golang
朱颜辞镜花辞树‎9 小时前
Go爬虫开发学习记录
爬虫·学习·golang
onlooker666616 小时前
Go 语言底层(四) : 深入 Context 上下文
开发语言·数据库·golang
roman_日积跬步-终至千里1 天前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang
海奥华22 天前
go中的接口返回设计思想
开发语言·后端·golang
飞川撸码2 天前
【LeetCode 热题100】网格路径类 DP 系列题:不同路径 & 最小路径和(力扣62 / 64 )(Go语言版)
算法·leetcode·golang·动态规划
roman_日积跬步-终至千里2 天前
【Go语言基础【14】】defer与异常处理(panic、recover)
golang