• 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))
    }

     

  • 相关阅读:
    pyinstaller
    screen
    docker
    rsync
    shutil模块
    mysql innodb 理解
    B 树和B+树存储的区别
    B-树原理分析
    mysql 通过mycat 读写分离
    mysql 主从复制
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/12289313.html
Copyright © 2020-2023  润新知