Golang的运算符优先级实操案例
Golang的运算符优先级实操案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.运算符优先级案例
运算符是用来在程序运行时执行数学或逻辑运算的,在Go语言中,一个表达式可以包含多个运算符,当表达式中存在多个运算符时,就会遇到优先级的问题,此时应该先处理哪个运算符呢? 经过前面的学习,想必大家对Golang中支持的运算符有一定的了解了,其实Golang中的运算符大致分为四类,即特殊(后缀)运算符,单目运算符,双目运算符和逗号运算符。 特殊(后缀)运算符: 比如:小括号("()"),中括号("[]"),点(".")等 单目运算符: 一个运算符需要一个标识符(变量,常量,函数返回值)可以参与计算。 双目运算符: 一个运算符需要两个标识符参与计算。 优先级别从高到底依次为算数运算符,比较运算符,位运算符,逻辑运算符,赋值运算符。 逗号运算符: 使用最后一个逗号的值作为结果。 综上所述,Go语言运算符的优先级从高到底大致分为:特殊运算符优先级高于单目运算符,单目运算符优先级高于双目运算符,双目运算符优先级高于逗号运算符。 而实际上Go语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同。Go语言中常见的操作符优先级由高到底顺序依次如下所示:
后缀运算符:
典型代表:"()","[]","->",优先级顺序为从左到右。
单目运算符:
典型代表:"-"(负号),"+"(正号),"--"(自减),"++"(自加),"&"(取内存地址),"*"(指针类型,取值),"!"(取反,即逻辑非),优先级顺序为从左到右。
算数运算符:
典型代表:"*"(乘号),"/"(除号),"%"(取余),"+"(加法),"-"(减法),优先级顺序为从左到右。
位移运算符:
典型代表:"<<"(左移),">>"(右移),优先级顺序为从左到右。
关系/比较运算符:
典型代表:"<","<=",">",">=","==","!=",优先级顺序为从左到右。
位逻辑运算符:
典型代表:"&"(按位与),"^"(按位异或),"|"(按位或),优先级顺序为从左到右。
逻辑运算符:
典型代表:"&&"(短路与),"||"(短路或),优先级顺序为从左到右
赋值运算符:
典型代表:"|=","^=","&=","<<=",">=","%=","/=","*=","-=","+=","=",优先级顺序为从左到右。
逗号运算符:
典型代表:","
关于运算符的优先级的使用小技巧: (1)记不住,用括号 (2)长表达式,多用括号, (3)易懂、易读
二.运算符优先级案例
package main import ( "fmt" ) func main() { /* 判断用户输出的年份是否是闰年 */ var year int fmt.Printf("请输入年份:>>> ") //给用户做一个输入提示信息 fmt.Scan(&year) fmt.Printf("判断%d年是否是闰年,结果为%t\n", year, year%4 == 0 && year%100 != 0 || year%400 == 0) /* 分析上面的"year%4 == 0 && year%100 != 0 || year%400 == 0"中语句的包含的运算符优先级如下所示: (1)算数运算符 year%4 year%100 year%400 (2)关系/比较运算符: year%4 == 0 year%400 == 0 year%100 != 0 (3) 逻辑运算符: year%4 == 0 && year%100 != 0 year%4 == 0 && year%100 != 0 || year%400 == 0 代码改进分析: 如上分析所示,根据操作符优先级表查出先做算数运算符,再做比较运算符,最后再做逻辑运算符。 代码的可读性较差,每次都得去查表,生产环境我们可以使用一些优先级的小技巧: (1)记不住,用括号 (2)长表达式,多用括号, (3)易懂、易读 综上所述,我们可以改写为以下表达式,使得可读性增强: (year%4 == 0) && (year%100 != 0) || (year%400 == 0) */ fmt.Printf("判断%d年是否是闰年,结果为%t\n", year, (year%4 == 0) && (year%100 != 0) || (year%400 == 0)) }
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。 欢迎加入基础架构自动化运维:598432640,大数据SRE进阶之路:959042252,DevOps进阶之路:526991186
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架