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
", 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
", year, (year%4 == 0) && (year%100 != 0) || (year%400 == 0))
}

 

原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12289313.html