Golang的运算符优先级实操案例
Golang的运算符优先级实操案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.运算符优先级案例
运算符是用来在程序运行时执行数学或逻辑运算的,在Go语言中,一个表达式可以包含多个运算符,当表达式中存在多个运算符时,就会遇到优先级的问题,此时应该先处理哪个运算符呢?
经过前面的学习,想必大家对Golang中支持的运算符有一定的了解了,其实Golang中的运算符大致分为四类,即特殊(后缀)运算符,单目运算符,双目运算符和逗号运算符。
特殊(后缀)运算符:
比如:小括号("()"),中括号("[]"),点(".")等
单目运算符:
一个运算符需要一个标识符(变量,常量,函数返回值)可以参与计算。
双目运算符:
一个运算符需要两个标识符参与计算。
优先级别从高到底依次为算数运算符,比较运算符,位运算符,逻辑运算符,赋值运算符。
逗号运算符:
使用最后一个逗号的值作为结果。 综上所述,Go语言运算符的优先级从高到底大致分为:特殊运算符优先级高于单目运算符,单目运算符优先级高于双目运算符,双目运算符优先级高于逗号运算符。 而实际上Go语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同。Go语言中常见的操作符优先级由高到底顺序依次如下所示:
后缀运算符:
典型代表:"()","[]","->",优先级顺序为从左到右。 单目运算符:
典型代表:"-"(负号),"+"(正号),"--"(自减),"++"(自加),"&"(取内存地址),"*"(指针类型,取值),"!"(取反,即逻辑非),优先级顺序为从左到右。 算数运算符:
典型代表:"*"(乘号),"/"(除号),"%"(取余),"+"(加法),"-"(减法),优先级顺序为从左到右。 位移运算符:
典型代表:"<<"(左移),">>"(右移),优先级顺序为从左到右。 关系/比较运算符:
典型代表:"<","<=",">",">=","==","!=",优先级顺序为从左到右。
位逻辑运算符:
典型代表:"&"(按位与),"^"(按位异或),"|"(按位或),优先级顺序为从左到右。 逻辑运算符:
典型代表:"&&"(短路与),"||"(短路或),优先级顺序为从左到右 赋值运算符:
典型代表:"|=","^=","&=","<<=",">=","%=","/=","*=","-=","+=","=",优先级顺序为从左到右。 逗号运算符:
典型代表:","
关于运算符的优先级的使用小技巧:
()记不住,用括号
()长表达式,多用括号,
()易懂、易读
二.运算符优先级案例
package main import (
"fmt"
) func main() { /*
判断用户输出的年份是否是闰年
*/
var year int
fmt.Printf("请输入年份:>>> ") //给用户做一个输入提示信息
fmt.Scan(&year) fmt.Printf("判断%d年是否是闰年,结果为%t\n", year, year% == && year% != || year% == ) /*
分析上面的"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% == ) && (year% != ) || (year% == ))
}

Golang的运算符优先级实操案例的更多相关文章
- 博科brocade光纤交换机alias-zone的划分-->实操案例
一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...
- 前端实操案例丨如何实现JS向Vue传值
摘要:项目开发过程中,组件通过render()函数渲染生成,并在组件内部定义了自定义拖拽指令.自定义拖拽指令规定了根据用户可以进行元素拖拽.缩放等一系列逻辑处理的动作. 本文分享自华为云社区<[ ...
- kivy之Button常用属性实操练习
kivy提供了Button按钮一系列属性来改变样式,下面列了常用的一些Button属性并用实操案例进行演练学习. 新建一个main.py,内容代码如下: from kivy.app import Ap ...
- jmeter & 性能测试:从0到实战(实操易用、面试造火箭、升职加薪必备)
[性能基础] 性能测试概念.术语:https://www.cnblogs.com/uncleyong/p/10706519.html 性能测试流程(新):https://www.cnblogs.com ...
- 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了
引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中? 本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中 ...
- 新硬盘挂载-fdisk+mount案例实操
新硬盘挂载-fdisk+mount案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 现在很多服务器都支持热插拔了,当有新的硬盘插入到服务器上我们需要将其分区,格式化,然后挂载 ...
- Kafka集群优化篇-调整broker的堆内存(heap)案例实操
Kafka集群优化篇-调整broker的堆内存(heap)案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看kafka集群的broker的堆内存使用情况 1>. ...
- c语言运算符优先级与while循环案例
sizeof可以获取数据类型的内存中的大小(字节) #include <stdio.h> #include <stdlib.h> // standared 标准 // inpu ...
- Python相关分析—一个金融场景的案例实操
哲学告诉我们:世界是一个普遍联系的有机整体,现象之间客观上存在着某种有机联系,一种现象的发展变化,必然受与之关联的其他现象发展变化的制约与影响,在统计学中,这种依存关系可以分为相关关系和回归函数关系两 ...
随机推荐
- 一步一步配置docker(tomcat+jenkins+phpmyadmin+nginx)
经过半个月的docker学习实践,今天对自己的学习成果做个总结. 貌似官方推荐的是docker compose使用DockerFile 来配置,但目前还没学习使用docker compose,先学习通 ...
- Dubbo与SpringBoot整合流程(从实例入手,附代码下载)
场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...
- centos7搭建svn服务器及客户端设置
centos7搭建svn服务器及客户端设置 centos7貌似预装了svn服务(有待确认),因此我们直接启动该服务即可 一.svn服务端配置(服务器IP假设为192.168.100.1) 步骤1:创建 ...
- 中山DAy2——普及
今天挺不友好的,早上忘记定闹钟,晚了半小时起床,然后早上信心满满打算弄他个300分.结果……132.2分·.WTF??? T1:disease 题意:有n头奶牛,k种细菌(k<=15),给你每头 ...
- Redis调用
Redis帮助类 using StackExchange.Redis; using System; using System.Collections.Generic; using System.Lin ...
- PHP pclzip.php 解压中文乱码
修改 pclzip中方法privExtractFile 代码 if ($p_path != '') { $p_entry['filename'] = $p_path."/".$p_ ...
- 【转载】将Centos的yum源更换为国内的阿里云源
自己的yum源不知道什么时候给改毁了--搜到了个超简单的方法将yum源更换为阿里的源 完全参考 http://mirrors.aliyun.com/help/centos?spm=5176.bbsr1 ...
- 三星 S10 运行 Ubuntu 系统
导读 DeX 是一种模仿桌面操作系统的用户 UI 界面,把支持 DeX 的三星手机用数据线连上外置显示器,用户就可以获得一种类似桌面系统的使用体验. 三星 S8.Note 8.S9.Note 9.S1 ...
- JetBrains IntelliJ IDEA(IJ)v2019.3.3/3.1/3.2/3.4/3.5 for mac/windows/linux 详细安装破解教程
手欠升级了IntelliJ IDEA到2019.3.3,原来的破解不可用,IntelliJ IDEA 2019.3.3破解办法如下,为方便自己使用记录下.======================= ...
- 使用总结:java多线程总结 <转载>
转载 https://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html java多线程总结 2011-08-28 20:08 Ro ...