Fork me on GitHub

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 从右向左 ........
乘法 * / % 从左向右
加法 + - 从左向右
移位 <<  >> 从左向右
关系 < <= > >= 从左向右
相等 == != 从左向右
按位与 & 从左向右
按位异或 ^ 从左向右
按位或 | 从左向右
逻辑与 && 从左向右
逻辑或 || 从左向右
赋值运算符 = += -= *= /= %= >>= <<= &= ^= |=  从右向左
逗号 , 从左向右
  • 上表中,优先级依次递减
  • 只有单目运算符、赋值运算符是从右向左进行运算的

 

posted @ 2021-11-07 15:36  iveBoy  阅读(151)  评论(0编辑  收藏  举报
TOP