【go入门】运算符
目录
- 前言
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 取地址和指针运算符
- 运算符优先级
前言
go语言和其他语言的运算符一样,大体上分为这么几种,算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符。最后也会说一下它们的优先级。
算术运算符
运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 取余 |
++ | 自增 |
– | 自减 |
//demo1
package main
import "fmt"
func main() {
a, b := 20, 10
var c int
c = a + b
fmt.Printf("a + b = %d\n", c)
c = a - b
fmt.Printf("a - b = %d\n", c)
c = a * b
fmt.Printf("a * b = %d\n", c)
c = a / b
fmt.Printf("a / b = %d\n", c)
c = a % b
fmt.Printf("取余 = %d\n", c)
a++
fmt.Printf("自增 = %d\n", a)
a--
fmt.Printf("自减 = %d\n", a)
}
输出结果是:
a + b = 30
a - b = 10
a * b = 200
a / b = 2
取余 = 0
自增 = 21
自减 = 20
关系运算符
运算符 | 描述 |
---|---|
== | 相等返回true不相等返回false |
!= | 不相等返回true否则返回false |
> | 左边值大于右边值返回true否则返回false |
< | 左边值小于右边值返回true否则返回false |
>= | 左边值大于等于右边值返回true否则返回false |
< | 左边值小于等于右边值返回true否则返回false |
逻辑运算符
运算符 | 描述 |
---|---|
&& | 逻辑与(AND),两边都为真为true否则false |
|| | 逻辑或(OR),两边都为假为true否则false |
! | 逻辑非(NOT),若A为真,则非A为假 |
//demo2
package main
import "fmt"
func main() {
a := true
b := false
fmt.Println(a && b)
fmt.Println(a || b)
fmt.Println(!a)
}
输出结果是:
false
true
false
位运算符
位运算符是对内存中的二进制进行运算
运算符 | 描述 |
---|---|
& | 按位与,对两边的操作数按位与,相同为1不同为0 |
| | 按位或,对两边的操作数按位或,都为0才为0,只要有一个1则为1 |
^ | 按位异或,对两边的操作数按位异或,相同为0不同为1 |
<< | 左移,左移n位就是乘以2的n次方 |
>> | 右移,右移n位就是除以2的n次方 |
可以看一下上一篇讲常量文章末尾的思考题。
赋值运算符
= 将表达式的值赋给左值(将右边的值赋给左边)
+= 将左右相加赋给左边
-= *= /= %= <<= >>= &= ^= |=
取地址和指针运算符
go语言和C语言一样也有指针和地址的概念
运算符 | 描述 |
---|---|
& | 返回变量存储地址,&a |
* | 指针变量,地址当中的内容,*a |
//demo3
package main
import "fmt"
func main() {
var a int = 1
var p *int
p = &a //p中存的是a的地址
fmt.Println(p) //输出的是a的地址
fmt.Println(*p) //*p是通过a的地址找到a的内容
}
输出结果是:
0xc00000a0e8
1
当然你的地址和我的地址可能不一样,这个是随机的,就和你去酒店开房,给你分配的房间号是随机的,只要空着,都可能会分配给你。内存相当于酒店,地址相当于房间号。
运算符优先级
运算符分优先级也就是说有些运算符先算有些后算,当同一优先级的运算符一起出现,从左往右算。
第一优先级 * / % << >> & &^
第二优先级 + - | ^
第三优先级 == != > < >= <=
第四优先级 &&
第五优先级 ||
可以通过小括号提升某个表达式的整体优先级
package main
import "fmt"
func main() {
a, b, c, d := 20, 10, 15, 5
var e int
e = (a + b) * c / d
fmt.Println(e)
e = a + (b*c)/d
fmt.Println(e)
e = (a + b) * (c / d)
fmt.Println(e)
e = ((a + b) * c) / d
fmt.Println(e)
}
输出结果是:
90
50
90
90