目录

Go运算符

运算符分类

运算符是一种特殊的符号,用以表示数据的运算赋值比较等。

  • 算术运算符
  • 赋值运算符
  • 比较运算符/关系运算符
  • 逻辑运算符
  • 位运算符
  • 其他运算符

算术运算符

介绍

算术运算符是对数值类型的变量进行运算的,比如:加减乘除。

运算符运算示例结果
+正好+33
-负号-4-4
+5 + 510
-6 - 42
*3 * 412
/5 / 51
%取模(取余)7 % 5
计算公式:a%b = a - a/b *b
2
++自增a := 2;a++a=3
自减a :=2;a–a=1
+字符串相加“He” + “llo”“Hello”

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
fmt.Println(10 / 4) //2

var n1 float32 = 10 / 4
fmt.Println(n1) //2

// 如果希望保留小数部分,则需要有浮点数参与运算
var n2 float32 = 10.0 / 4
fmt.Println(n2) //2.5

// % 计算公式:a % b = a - a / b * b
fmt.Println("10%3=", 10%3)     //10%3= 1
fmt.Println("-10%3=", -10%3)   //-10%3= -1
fmt.Println("10%-3=", 10%-3)   //10%-3= 1
fmt.Println("-10%-3=", -10%-3) //-10%-3= -1

//++和--
var i int = 10
i++                  //等价于 i = i + 1
fmt.Println("i=", i) //i= 11
i--                  //等价于 i = i - 1
fmt.Println("i=", i) //i= 10

细节

  1. 对于除号/,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。例如x:=19/5,结果是3
  2. 当对一个数取模时,可以等价a%b=a-a/b*b,这样可以看到取模的一个本质运算。
  3. Go的自增自减只能当做一个独立语言使用,不能这样使用:b := a++或者b := a--
  4. Go的++--只能卸载变量的后面,不能写在前面,只有a++,a--,没有++a,--a

关系运算符(比较运算符)

介绍

  1. 关系运算符的结果都是bool型,也就是说:要么是true,要么是false
  2. 关系表达式经常用在if结构的条件中或for循环结构的条件中
运算符运算示例结果
==相等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3True

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var (
    a int = 9
    b int = 8
)
fmt.Println("a>b=", a > b)   //a>b= true
fmt.Println("a>=b=", a >= b) //a>=b= true
fmt.Println("a<=b=", a <= b) //a<=b= false
fmt.Println("a<b=", a < b)   //a<b= false
fmt.Println("a==b=", a == b) //a==b= false
fmt.Println("a!=b=", a != b) //a!=b= true

细节

  1. 关系运算符的结果都是bool
  2. 关系运算符组成的表达式,称为关系表达式
  3. 比较运算符==不能误写成=

逻辑运算符

介绍

用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool

运算符描述示例(A:True,B:False)
&&逻辑运算符。
如果两边的操作都是True,则为True,否则为False
(A && B)False
||逻辑运算符。
如果两边的操作数有一个True,则为True,否则为False
(A || B)True
!逻辑运算符。
如果条件为True,则逻辑为False,否则为True
!(A && B)True

示例

1
2
3
4
5
fmt.Println(true && false)    //false
fmt.Println(false && true)    //false
fmt.Println(false || true)    //true
fmt.Println(true || false)    //true
fmt.Println(!(true && false)) //true

细节

  1. &&也叫短路与;如果第一个条件为false,则第二个条件不会判断,最终结果为false

    1
    
    fmt.Println(false && true)    //false
    
  2. ||也叫短路或;如果第一个条件为true,则第二个条件不会判断,最终结果为true

    1
    
    fmt.Println(true || false)    //true
    

赋值运算符

介绍

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

运算符描述示例
=简单的赋值运算符,将一个表达式的值赋给变量C = A + B
+=相加后再赋值C += A
-=相减后再赋值C -= A
*=相乘后再赋值C *= A
/=相除后再赋值C /= A
%=求余(取模)后再赋值C %= A

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var a int = 20
var b int = 10
var c int
c = a + b
fmt.Println(c) //30 = 20 + 10
c += a
fmt.Println(c) //50 = 30 + 20
c -= a
fmt.Println(c) //30 = 50 - 20
c *= a
fmt.Println(c) // 600 = 30 * 20
c /= a
fmt.Println(c) //30 = 600 / 20
c %= a
fmt.Println(c) //10 = 30 % 20

细节

  1. 运算顺序从右往左
  2. 赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量值
  3. 复合赋值运算等价于下面的效果:a += 3 等价于 a = a + 3

位运算符

运算符描述
&按位运算符&是双目运算符。其功能是参与运算的两数各对应的二进位相与。
运算规则:同时为1,结果为1,否则为0
|按位运算符|是双目运算符。其功能是参与运算的两数各对应的二进位相或。
运算规则:有一个为1,结果为1,否则为0
^按位异或运算符^是双目运算符。其功能是参与运算的两数相对应的二进位相异或。
运算规则:当二进制位不同时,结果为1,否则为0
«左移运算符<<是双目运算符。其功能把<<左边的运算数的各二进制位全部左移若干位,高位丢弃,低位补0.
左移n位就是乘以2的n次方。
»右移运算符>>是双目运算符。其功能把>>左边的运算数的各二进制位全部右移若干位。
右移n位就是除以2的n次方。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var num1 int = 25 //11001
var num2 int = 20 // 10100
//二进制位,同时为1,结果为1,否则为0
fmt.Println(num1 & num2) // 16 10000
//二进制位,有一个为1,结果为1,否则为0
fmt.Println(num1 | num2) // 29 11101
//二进制位,当二进制位不同时,结果为1,否则为0
fmt.Println(num1 ^ num2) // 13 01101
//各二进制位全部左移若干位,高位丢弃,低位补0
fmt.Println(num1 << 2) //100 1100100 25*2^2=100
//各二进制位全部右移若干位
fmt.Println(num1 >> 2) // 6 110 25/2^2=6

其他运算符

运算符描述示例
&返回变量存储地址&a 将给出变量的存储地址
*指针变量*a 是一个指针变量
1
2
3
4
5
var name string = "Joker"
var prt *string = &name
fmt.Printf("name的内存地址:%v\n", &name) //name的内存地址:0xc00004a530
fmt.Println("prt=", prt)            //prt= 0xc00004a530
fmt.Printf("prt指针变量的值为:%v\n", *prt) //prt指针变量的值为:Joker

运算符优先级

优先级分类运算符结合性
1逗号运算符,从左到右
2赋值运算符=、+=、-=、*=、/=、 %=、 >=、 «=、&=、^=、|=从右到左
3逻辑或||从左到右
4逻辑与&&从左到右
5按位或|从左到右
6按位异或^从左到右
7按位与&从左到右
8相等/不等==、!=从左到右
9关系运算符<、<=、>、>=从左到右
10位移运算符«、»从左到右
11加法/减法+、-从左到右
12乘法/除法/取余*(乘号)、/、%从左到右
13单目运算符!、*(指针)、& 、++、–、+(正号)、-(负号)从右到左
14后缀运算符( )、[ ]、->从左到右

❣️注意:优先级值越大,表示优先级越高。