当前位置: 首页 > news >正文

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

文章目录

    • 一、算术运算符:做数学计算
    • 二、关系运算符:比较两个值的关系
    • 三、逻辑运算符:组合布尔条件
    • 四、位运算符:操作二进制位
    • 五、赋值运算符:给变量赋值
    • 六、其他运算符:取地址与解引用
      • 1. 取地址运算符(`&`)
      • 2. 解引用运算符(`*`)
    • 七、运算符优先级:决定计算顺序

 

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

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

运算符含义示例结果说明
+加法5 + 38
-减法10 - 46
*乘法3 * 26
/除法10 / 33(整数除法取整)
%取余(模运算)10 % 31(10 除以 3 余 1)
++自增a := 2; a++a 变为 3
--自减b := 5; b--b 变为 4

 
注意事项

  1. 类型必须一致
    不能混合不同类型运算,例如 intfloat64 不能直接相加:
    var a int = 10
    var b float64 = 20.5
    c := a + b // 报错!需显式转换类型:float64(a) + b
    
  2. 整数除法的特性
    整数相除结果为整数,会直接丢弃小数部分:
    fmt.Println(5 / 2) // 输出 2(非 2.5)
    
  3. 自增/自减只能作为语句
    不能在表达式中使用(如 print(a++)),只能单独写为 a++a--

 

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

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

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

示例:条件判断

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

 

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

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

运算符含义示例结果说明
&&逻辑与(AND)true && falsefalse(必须两边都为真)
||逻辑或(OR)true || falsetrue(只要一边为真)
!逻辑非(NOT)!truefalse(取反)

示例:组合条件

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

 

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

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

运算符含义二进制运算示例结果(十进制)
&按位与a & b0000 110012
|按位或a | b0011 110161
^按位异或a ^ b0011 000149
<<左移a << 21111 0000240
>>右移a >> 20000 111115

应用场景

  • 按位与(&:提取特定位(如 num & 1 判断奇偶性,结果为 1 是奇数,0 是偶数)。
  • 左移(<<:快速计算乘法(左移 n 位相当于乘以 2^n,如 3 << 2 = 3*4=12)。
  • 右移(>>:快速计算除法(右移 n 位相当于除以 2^n,如 8 >> 2 = 8/4=2)。

 

五、赋值运算符:给变量赋值

作用:将右侧的值赋给左侧变量,支持复合运算(简化代码)。
运算符与示例

运算符含义等价写法示例
=简单赋值a = bvar a = 10
+=加后赋值a = a + ba += 5a = a + 5
-=减后赋值a = a - bb -= 3b = b - 3
*=乘后赋值a = a * bc *= 2c = c * 2
/=除后赋值a = a / bd /= 4d = d / 4
%=取余后赋值a = a % be %= 3e = 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
http://www.lqws.cn/news/152497.html

相关文章:

  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ
  • 全面解析网络端口:概念、分类与安全应用
  • Hive SQL常见操作
  • 邮件分类项目
  • 【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器
  • 【安全攻防与漏洞】​​量子计算对HTTPS的威胁:后量子密码学进展
  • 量子计算+AI:特征选择与神经网络优化创新应用
  • 新版NANO下载烧录过程
  • 007-nlohmann/json 项目应用-C++开源库108杰
  • LFWG2024.08
  • 互联网大厂Java面试:从Spring Cloud到Kafka的技术考察
  • 如何给windos11 扩大C盘容量
  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • 【Go语言基础】基本语法
  • 命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6
  • Vite模块联邦(vite-plugin-federation)实现去中心化微前端后台管理系统架构
  • 《C++初阶之类和对象》【命名空间 + 输入输出 + 缺省参数 + 函数重载】
  • ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
  • .Net Framework 4/C# LINQ*
  • 机器学习的数学基础:决策树
  • 双空间知识蒸馏用于大语言模型
  • win32相关(远程线程和远程线程注入)
  • 初探Service服务发现机制
  • 基础线性代数
  • 文档处理组件Aspose.Words 25.5全新发布 :六大新功能与性能深度优化
  • Python实现markdown文件转word
  • 【react+antd+vite】优雅的引入svg和阿里巴巴图标
  • Java在word中指定位置插入图片。
  • npm run dev 报错:Error: error:0308010C:digital envelope routines::unsupported
  • Flash烧录速度和加载配置速度(纯FPGA ZYNQ)