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的运算符优先级实操案例的更多相关文章

  1. 博科brocade光纤交换机alias-zone的划分-->实操案例

    一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...

  2. 前端实操案例丨如何实现JS向Vue传值

    摘要:项目开发过程中,组件通过render()函数渲染生成,并在组件内部定义了自定义拖拽指令.自定义拖拽指令规定了根据用户可以进行元素拖拽.缩放等一系列逻辑处理的动作. 本文分享自华为云社区<[ ...

  3. kivy之Button常用属性实操练习

    kivy提供了Button按钮一系列属性来改变样式,下面列了常用的一些Button属性并用实操案例进行演练学习. 新建一个main.py,内容代码如下: from kivy.app import Ap ...

  4. jmeter & 性能测试:从0到实战(实操易用、面试造火箭、升职加薪必备)

    [性能基础] 性能测试概念.术语:https://www.cnblogs.com/uncleyong/p/10706519.html 性能测试流程(新):https://www.cnblogs.com ...

  5. 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了

    引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中?         本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中 ...

  6. 新硬盘挂载-fdisk+mount案例实操

    新硬盘挂载-fdisk+mount案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 现在很多服务器都支持热插拔了,当有新的硬盘插入到服务器上我们需要将其分区,格式化,然后挂载 ...

  7. Kafka集群优化篇-调整broker的堆内存(heap)案例实操

    Kafka集群优化篇-调整broker的堆内存(heap)案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看kafka集群的broker的堆内存使用情况 1>. ...

  8. c语言运算符优先级与while循环案例

    sizeof可以获取数据类型的内存中的大小(字节) #include <stdio.h> #include <stdlib.h> // standared 标准 // inpu ...

  9. Python相关分析—一个金融场景的案例实操

    哲学告诉我们:世界是一个普遍联系的有机整体,现象之间客观上存在着某种有机联系,一种现象的发展变化,必然受与之关联的其他现象发展变化的制约与影响,在统计学中,这种依存关系可以分为相关关系和回归函数关系两 ...

随机推荐

  1. How to add VTL tapes on DD6300 & label them into "Oracle_VTL" pool

    Dear all , This is  liulei ,   I was back so , How to add VTL tapes on DD6300 & label them into ...

  2. 122、Java面向对象之直接输出对象本身

    01.代码如下: package TIANPAN; class Book { public void print() { // 调用print()方法的对象就是当前对象,this就自动与此对象指向同一 ...

  3. CSS - 布局流程

    一.为了提高网页制作的效率,布局时通常需要遵守一定的布局流程,具体如下: "版心"(可视区) 是指网页中主体内容所在的区域.一般在浏览器窗口中水平居中显示,常见的宽度值为960px ...

  4. 高手教大家如何配置JVM参数

    /usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server -Xms1800M -Xmx1800M -Xmn300M -Xss512K ...

  5. sklearn中调用集成学习算法

    1.集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常 ...

  6. TCP/IP,三次握手四次挥手,TCP/UDP , HTTP/HTTPS

    internet:通用名词,由多个计算机网络组成的网络,网络间的通信协议是任意的 Internet:专用名词,当前全球最大的开放计算机网络,采用TCP/IP协议族作为通信的规则.www万维网是广泛应用 ...

  7. thymeleaf html5

    一.引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 在html中引入此命名空间,可避免编辑器出现html验证错误,虽 ...

  8. android中按back键返回上一个activity,如何重新调用上一个activity的oncreate方法?

    默认情况下是不会调用的. @Override public void onBackPressed() { String titleStr = edittitle.getText().toString( ...

  9. github默认端口22被占用,ssh: connect to host github.com port 22: Connection timed out

    出现github 连接错误: ssh:connect to host github.com port 22:Connection timed out 刚开始以为是网络问题,github不能连接上,但是 ...

  10. ORACLE锁表问题

    1.查询锁表的信息 select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name, ao.object_name,lo.locked ...