zoukankan      html  css  js  c++  java
  • Go语言之运算符

    一、运算符的基本分类

    • 算术运算符
    • 赋值运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
    • 其它运算符

    二、算术运算符

    算术运算符是对数值类型变量进行运算的一种运算符。

    (一)算术运算符一览表

    运算符 运算 范例 结果
    + 正号 +8 8
    - 负号 -8 -8
    + 8+9 17
    - 8-2 6
    * 8 * 2 16
    / 8 / 2 4
    % 取模 8 % 3 2
    ++ 自增 x = 3  x++ 4
    -- 自减 x = 3  x-- 2
    + 字符串相加 “x” + "y" "xy"

    (二)案例演示

    package main
    import "fmt"
    
    func main() {
        // + - * / % ++ --案例
    
        var a int = 12
        var b int = 7
    
        fmt.Println(a + b) // 19
        fmt.Println(a - b) // 5
        fmt.Println(a * b) // 84
        fmt.Println(a / b) // 1 如果需要为浮点数,重新定义a为浮点数12.0 var a float32 = 12.0
        fmt.Println(a % b) // 5
        a++
        fmt.Println(a) // 13
        a--
        fmt.Println(a) //12
        
    }

    (三)注意事项

    • 除号“/”,整数除和小数除是有区别的,整数之间的除,只保留整数部分而舍弃小数部分
    • 当对一个数取模时,可以等价于a % b = a - a / b * b
    • Go中自增自减只能当作一个独立语言使用,不能使用 c = a++,而是只能独立使用为a++
    • Go中的++和--只能写在变量的后面,不能写在变量的前面,即只有a++,而没有++a 

    三、赋值运算符

    赋值运算符就是将某个运算后的值,赋值给指定的变量。

    (一)赋值运算符一览表

    运算符 描述 实例
    = 将一个表达式的值赋值给一个左值 c=a+b,将a+b的值赋值给c
    += 相加后再赋值 c+=a等于c=c+a
    -= 相减后再赋值 c-=a等于c=c-a
    *= 相乘后再赋值 c*=a等于c=c*a
    /= 相除后再赋值 c/=a等于c=c/a
    %= 求余后再赋值 c%=a等于c=c%a
    <<= 左移后赋值 c<<=2等于c=c<<2
    >>= 右移后赋值 c>>=2等于c=c>>2
    &= 按位与后赋值 c&=2等于c=c&2
    ^= 按位异或后赋值 c^=2等于c=c^2
    |= 按位或后赋值 c|=2等于c=c|2

    (二)案例演示

    package main
    
    import "fmt"
    
    func main() {
        // 交换a,b两个数的值
        a := 2
        b := 5
        fmt.Printf("交换前a=%v,b=%v",a,b) //交换前a=2,b=5
        //定义一个中间变量temp
        temp := a
        a = b
        b = temp
        fmt.Printf("交换后a=%v,b=%v",a,b) //交换后a=5,b=2
    
    }
    • 赋值运算符从右向左进行计算
    • 赋值运算符的左边只能时变量,右边可以时变量、表达式、常量值
    package main
    
    import "fmt"
    
    func main() {
        //交换a,b两个数的值,不允许使用中间变量
        a := 2
        b := 5
    
        a = a + b
        b = a - b // b = a + b - b
        a = a - b // a = a - (a-b) 
        fmt.Printf("交换后a=%v,b=%v",a,b) //交换后a=5,b=2
    
    }
    package main
    
    import "fmt"
    
    func main() {
        // 求出三个数的最大值
        // 先求出两个数的最大值,然后再求出第三个
    
        a := 10
        b := 35
        c := 25
        
        var max int
    
        if a > b {
            max = a
        } else {
            max = b
        }
    
        fmt.Printf("两个数的最大值为%v", max) //35
    
        if c > max {
            max = c
        }
    
        fmt.Printf("三个数的最大值为%v", max) //35
    
    }

     四、关系运算符

    关系运算符常用于if结构的条件语句或者循环结构,它的结果都是bool型(true/false)。

    (一)关系运算符一览表

    运算符 运算 案列 结果
    == 相等于 5==3 false
    != 不等于 5!=3 true
    < 小于 5<3 false
    > 大于 5>3 true
    <= 小于等于 5<=3 false
    >= 大于等于 5>=3 true

    (二)案例演示

    package main
    
    import "fmt"
    
    
    func main() {
    
        var a int = 5
        var b int = 3
    
        fmt.Println(a==b) //false
        fmt.Println(a!=b) //true
        fmt.Println(a<b) //false
        fmt.Println(a>b) //true
        fmt.Println(a<=b) //false
        fmt.Println(a>=b) //true
    
    }

     五、逻辑运算符

    用于连接多个关系表达式,结果也是一个bool类型的值。

    (一)逻辑运算符一览表

    假设 A的值为true,B的值为false:

    运算符 说明 实例
    && 逻辑与运算符。如果两边都为true结果为true,否则为false. A&&B 为 false
    || 逻辑或运算符。如果两边操作数有一个为true,则为true,否则为false  A||B 为 true
     逻辑非运算符。如果条件为true,则则为false,否则为true  !(A&&B) 为 true

    (二)案例演示

    package main
    
    import "fmt"
    
    func main() {
    
        var A bool = true
        var B bool = false
    
        fmt.Println(A&&B) //false
        fmt.Println(A||B) // true
        fmt.Println(!(A&&B)) //true
    }

    (三)注意事项

    • &&也叫短路与,如果第一个条件为false,则第二个条件不会判断最终结果为false
    • ||也叫短路或,如果第一个条件为true,则第二个条件不会判断,最终结果为true

    六、位运算符

    位运算符涉及到二进制相关内容,其一览表如下:

    运算符 描述
    & 按位与运算符,参与运算的两数各对应的二进制相与。同为1结果为1,否则为0
    | 按位或运算符,参与运算的两数各对应的二进制相或。有一个为1结果为1,否则为0
    ^ 按位异或运算符,参与运算的两数各对应的二进制异或。当二进制不同时,结果为1,否则为0
    << 左移运算符,把“<<”左边运算数的二进制全部左移若干位,高位丢弃,低位补0。左移n位就是乘以2的n次方
    >> 左移运算符,把“>>”左边运算数的二进制全部右移若干位,右移n位就是除以2的n次方

    七、其它运算符

    (一)指针相关

    运算符 描述 实例
    & 返回变量存储地址 &a,获取变量的实际地址
    * 指针变量 *a,是一个指针变量

    (二)三元运算符

    Go语言中不支持三元运算符,如果想达到三元运算符的效果就需要使用条件语句来进行实现。

    if <condition> {
        //...
    
    } else {
        //...
    
    }

    八、运算符的优先级

    分类 描述 关联性 优先级
    后缀 () [] ++ -- 从左向右
    单目 + - ! ~ (type) * & sizeof 从右向左 ........
    乘法 * / % 从左向右
    加法 + - 从左向右
    移位 <<  >> 从左向右
    关系 < <= > >= 从左向右
    相等 == != 从左向右
    按位与 & 从左向右
    按位异或 ^ 从左向右
    按位或 | 从左向右
    逻辑与 && 从左向右
    逻辑或 || 从左向右
    赋值运算符 = += -= *= /= %= >>= <<= &= ^= |=  从右向左
    逗号 , 从左向右
    • 上表中,优先级依次递减
    • 只有单目运算符、赋值运算符是从右向左进行运算的
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [CF603C] Lieges of Legendre
    [CF1070A] Find a Number
    [CF431D] Random Task
    2020牛客暑期多校训练营(第二场)C
    2020牛客暑期多校训练营(第二场)F
    2020牛客暑期多校训练营(第二场)D
    2020牛客暑期多校训练营(第一场)H
    [CF1000E] We Need More Bosses
    Java学习2 (ThreadLocal)
    Java复习1
  • 原文地址:https://www.cnblogs.com/shenjianping/p/15477682.html
Copyright © 2011-2022 走看看