GO语言基础语法(3)
本章写的主要是运算符,运算符的应用及代码的使用过程,运算符我们在编程中会使用的比较频繁,所以重点拉出来写写,这也是我自己学的整理成的笔记。可以一起学习学习。 在 Go 语言中,有很多种运算符,这些运算符的计算顺序是按照一定的规则来确定的,这就是所谓的运算符优先级,它能够决定程序执行顺序。本文将介绍 Go 语言中的运算符优先级。
一、基础运算符
- 算术运算符
算术运算符包括加(+)、减(-)、乘(*)、除(/)和取余(%)五种,其中优先级从高到低依次为:
- 括号(())
- 取反(-x)
- 乘法、除法和取余(*、/、%)
- 加法、减法(+、-)
举个例子:
a := 10 + 202 // 先乘法,再加法,等价于 a := 10 + (202) = 50
b := (10 + 20) 2 // 使用括号,先加法,再乘法,等价于 b := (10+20) 2 = 60
- 关系运算符
关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)六种,其中优先级从高到低依次为:
- 括号(())
- 大于、小于、大于等于、小于等于(>、<、>=、<=)
- 等于、不等于(==、!=)
举个例子:
a := 10 > 5 && 5 < 3 || 4 > 2 // 先执行 &&,再执行 ||,等价于 a := (10 > 5 && 5 < 3) || (4 > 2) = true
- 逻辑运算符
逻辑运算符包括取反(!)、与(&&)和或(||)三种,其中优先级从高到低依次为:
- 括号(())
- 取反(!)
- 与(&&)
- 或(||)
举个例子:
a := true || false && !true // 先执行 !,再执行 &&,最后执行 ||,等价于 a := true || false = true
二、位运算符
位运算符包括按位与(&)、按位或(|)、异或(^)、左移(<<)和右移(>>)五种,其中优先级从高到低依次为:
- 括号(())
- 左移、右移(<<、>>)
- 按位与(&)
- 按位异或(^)
- 按位或(|)
举个例子:
a := 1 << 2 & 3 | 4 ^ 5 >> 2 // 先执行 <<、>>,再执行 &、^,最后执行 |,等价于 a := 0 | 1 = 1
三、赋值运算符
赋值运算符包括等于(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、取余等于(%=)、左移等于(<<=)、右移等于(>>=)、按位与等于(&=)、按位或等于(|=)和按位异或等于(^=)十一种,其中优先级从低到高依次为:
- 按位或等于(|=)
- 按位异或等于(^=)
- 按位与等于(&=)
- 左移等于(<<=)
- 右移等于(>>=)
- 取余等于(%=)
- 除等于(/=)
- 乘等于(*=)
- 减等于(-=)
- 加等于(+=)
- 等于(=)
举个例子:
a, b := 1, 2
a += b + 3 4 // 先执行乘法,再执行加法,最后执行 +=,等价于 a = a + (b + 3 4) = 15
通过了解 Go 语言中各种运算符的优先级,我们可以更加准确地写出程序,并且更好地理解程序的计算过程。
算术运算符
- 运算符:+,-,*,/,%,++,--
- 介绍:算术运算符是对数值类型的变量进行运算,比如,加减乘法。
- 代码请连起来看,分开是为了解释
加号的用法
1.正数,2.相加操作,3.字符串连接
package main
import "fmt"
func main() {
//+加号
//1.正数,2.相加操作,3.字符串连接
var n1 int = +10
fmt.Println(n1)
var n2 int = 2 + 5
fmt.Println(n2)
var s1 string = "abc" + "df"
fmt.Println(s1)
除号
- 两个int类型数据类型,结果一定为整数类型
- 浮点类型参与运算运算,结果为浮点
fmt.Println(10 / 3) //两个int类型数据类型,结果一定为整数类型
fmt.Println(10.0 / 3) //浮点类型参与运算运算,结果为浮点
%取模
等价公式:a%b=a-a/b*b
fmt.Println(10 % 3) //10%3=10-10/3*3=1
fmt.Println(-10 % 3)
fmt.Println(10 % -3)
fmt.Println(-10 % -3)
++自增操作,--自减
加1操作 --,减1操作
var a int = 3
a++
fmt.Println(a) //4
a--
fmt.Println(a)
//go语言里,++ --操作非常简单,只能单独使用,不能参与到运算中去
//go语言里,++ -- 只能在变量的后面,不能写在变量前面,--a,++a是错的
}
赋值运算符
- 赋值运算符:= ,+= ,-=,-=,*=,/=,%=
- 赋值运算符就是将某个运算后的值,赋给指定的变量
- 代码需要一起看,分开是为了解释
package main
import "fmt"
func main() {
var num1 int = 10
fmt.Println(num1)
var num2 int = (10+20)%3 + 3 - 7 //=等号右侧的值运算清楚后,再赋值给=的左侧
fmt.Println(num2)
var num3 int = 10
num3 += 20 //等价num3 = num3 + 30
fmt.Println(num3)
交换两个数的值并输出结果:(这里是拓展,接触过其他语言的人应该不难理解,而且会用)
var a int = 8
var b int = 4
fmt.Printf("a = %v,b = %v", a, b)
//交换
//引入中间变量
var t int
t = a
a = b
b = t
fmt.Printf("a = %v,b = %v", a, b)
}
关系运算符
- 关系运算符:==,!=,>,<,>=,<=
- 关系运算符的结果都是bool类型,也就是要么是true,要么是false
- 关系表达式经常用在流程控制中
package main
import "fmt"
func main() {
fmt.Println(1 == 9) //判断左右两侧的值是否相等,相等返回true,不相等返回false,==不是=
fmt.Println(1 != 9) //判断不等于
fmt.Println(1 > 9)
fmt.Println(1 < 9)
fmt.Println(1 >= 9)
fmt.Println(1 <= 9)
}
逻辑运算符
逻辑运算符 :&&,||,!
- &&:逻辑与运算符,如果两边的操作数都是true,则为true,否则为false
- ||:逻辑或运算符,如果两边的操作数有一个true,则为true,否则为false
- !:逻辑非运算符,如果条件为true,则逻辑为false,否则为true
package main
import (
"fmt"
)
func main() {
fmt.Println(3 == 5 && 4 > 2) //false
fmt.Println(3 == 5 || 4 > 2) //true
fmt.Println(!(10 > 5)) //false
}
其他运算符
其他运算符
- &:返回变量的存储地址
- *:取指针变量对应的数值
- 可以看指针那边,差不多的,就是*和&的区别
package main
import "fmt"
func main() {
//定义一个变量
var age int = 20
fmt.Println("age对应的存储空间的地址为: ", &age) //age对应的存储空间的地址为: 0xc000018098
var ptr *int = &age
fmt.Println(ptr) //0xc000018098
fmt.Println("ptr这个指针指向的具体数值为: ", *ptr) //ptr这个指针指向的具体数值为: 20
}