Go语言学习笔记——(四)运算符

本文详细介绍了Go语言中的各种运算符,包括算数运算、赋值运算、关系运算、逻辑运算、位运算以及运算符的优先级。还涉及了变量地址和指针操作。通过实例展示了这些运算符的使用方法和结果。
摘要由CSDN通过智能技术生成

目录

一、运算符

1、算数运算符

2、赋值运算符

3、关系运算符

4、逻辑运算符

5、位运算符

6、其他运算符

7、运算符优先级


一、运算符

1、算数运算符

func main() {
	// +号
	// 1、表正数 2、相加 3、字符串拼接
	var n1 int = +1
	fmt.Println(n1)
	var n2 int = 2 + 1
	fmt.Println(n2)
	var n3 string = "aer" + "opi"
	fmt.Println(n3)

	// -号 相减
	var n4 = 10 - 5
	fmt.Println(n4)
	
	// /号
	// int类型相除,结果为int型
	var n5 = 10 / 2
	fmt.Printf("n5对应的类型是: %T, n5 = %v \n", n5, n5)
	// 浮点类型参与运算,结果为浮点型
	var n6 = 10.2 / 3
	fmt.Printf("n6对应的类型是: %T, n6 = %v \n", n6, n6)

	// %取模,等价公式:a%b = a-a/b*b
	fmt.Println(10%3)
	fmt.Println(-10%3)

	// ++自增 --自减
	// 需要注意的是,Go中自增自减只能在变量后面,++n --n这种写法都是错误的
	// 自增自减只能单独使用,不能参与到运算中
	var n7 = 10
	fmt.Printf("n7自增前的值是:%v \n", n7)
	n7++
	fmt.Printf("n7自增后的值是:%v \n", n7)
}

运行结果:

 

2、赋值运算符

func main() {
	var a int = 21
	var c int
 
	// 将=右边的值赋给左边值
	c =  a
	fmt.Printf("=  运算符实例,c 值为 = %d\n", c )
	// 相加后再赋值 c = c + a
	c +=  a
	fmt.Printf("+= 运算符实例,c 值为 = %d\n", c )
	// 相减后再赋值 c = c - a
	c -=  a
	fmt.Printf("-= 运算符实例,c 值为 = %d\n", c )
	// 相乘后再赋值 c = c * a
	c *=  a
	fmt.Printf("*= 运算符实例,c 值为 = %d\n", c )
	// 相除后再赋值 c = c / a
	c /=  a
	fmt.Printf("/= 运算符实例,c 值为 = %d\n", c )

	c  = 200;
	// 左移后赋值  c = c << 2
	c <<=  2
	fmt.Printf("<<= 运算符实例,c 值为 = %d\n", c )
	// 右移后赋值 c = c >> 2
	c >>=  2
	fmt.Printf(">>= 运算符实例,c 值为 = %d\n", c )
	// 按位与后赋值 c = c & 2
	c &=  2
	fmt.Printf("&= 运算符实例,c 值为 = %d\n", c )
	// 按位异或后赋值 c = c ^ 2
	c ^=  2
	fmt.Printf("^= 运算符实例,c 值为 = %d\n", c )
	// 按位或后赋值 c = c | 2
	c |=  2
	fmt.Printf("|= 运算符实例,c 值为 = %d\n", c )
}

运行结果:

3、关系运算符

关系运算符的结果都是bool型

关系运算符经常用在流程控制中

func main() {
	var a int = 21
	var b int = 20
	fmt.Printf("a值为:%v b值为:%v\n", a, b )
	// 检查两个值是否相等,如果相等返回 True 否则返回 False
	fmt.Printf("==  运算符实例,a == b值为 = %v\n", a==b )
	// 检查两个值是否不相等,如果不相等返回 True 否则返回 False。
	fmt.Printf("!= 运算符实例,a != b值为 = %v\n", a != b )
	// 检查左边值是否大于右边值,如果是返回 True 否则返回 False。
	fmt.Printf("> 运算符实例,a > b值为 = %v\n", a > b )
	// 检查左边值是否小于右边值,如果是返回 True 否则返回 False。
	fmt.Printf("< 运算符实例,a < b值为 = %v\n", a < b )
	// 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
	fmt.Printf(">= 运算符实例,a >= b值为 = %v\n", a >= b )
	// 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
	fmt.Printf("<= 运算符实例,a <= b值为 = %v\n", a <= b )
}

运行结果:

 

4、逻辑运算符

逻辑运算
AB与AND或OR非NOT(A)异或XOR与或NAND
0000101
0101111
1001011
1111000

func main() {
	// && 逻辑与运算
	// 短路与,只要第一个值/表达式为false,则后面表达式不用运算,结果就是false
	fmt.Printf("-----&& 逻辑与运算-----\n")
	fmt.Printf(" true && true值为 = %v\n", true&&true )
	fmt.Printf(" true && false值为 = %v\n", true&&false )
	fmt.Printf(" false && true值为 = %v\n", false&&true )
	fmt.Printf(" false && false值为 = %v\n", false&&false )

	// || 逻辑或运算
	// 短路或,只要第一个值/表达式为true,则后面表达式不用运算,结果就是true
	fmt.Printf("-----|| 逻辑或运算-----\n")
	fmt.Printf(" true || true值为 = %v\n", true||true )
	fmt.Printf(" true || false值为 = %v\n", true&&false )
	fmt.Printf(" false || true值为 = %v\n", false||true )
	fmt.Printf(" false || false值为 = %v\n", false||false )

	// ! 逻辑非运算
	fmt.Printf("-----! 逻辑非运算-----\n")
	fmt.Printf(" !true值为 = %v\n", !true )
	fmt.Printf(" !false值为 = %v\n", !false )
}

运算结果:

5、位运算符

func main() {
	// 60 = 0011 1100
	var a uint = 60
	// 13 = 0000 1101
	var b uint = 13 
	var c uint = 0          
 
	// 双目运算符,按位与运算符"&"。 其功能是参与运算的两数各对应的二进位相与
	// 12 = 0000 1100
	c = a & b
	fmt.Printf("a & b 时 c 的十进制值为:%d, 二进制值为:%b\n", c, c )
 
	// 双目运算符,按位或运算符"|"。 其功能是参与运算的两数各对应的二进位相或
	// 61 = 0011 1101
	c = a | b
	fmt.Printf("a | b 时 c 的十进制值为:%d, 二进制值为:%b\n", c, c )
 
	// 双目运算符,按位异或运算符"^"。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1
	// 49 = 0011 0001
	c = a ^ b
	fmt.Printf("a ^ b 时 c 的十进制值为:%d, 二进制值为:%b\n", c, c )
 
	// 	双目运算符,左移运算符"<<"。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
	// 240 = 1111 0000
	c = a << 2
	fmt.Printf("a << 2 时 c 的十进制值为:%d, 二进制值为:%b\n", c, c )
 
	// 双目运算符,右移运算符">>"。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
	// 15 = 0000 1111
	c = a >> 2
	fmt.Printf("a >> 2 时 c 的十进制值为:%d, 二进制值为:%b\n", c, c )
}

运行结果:

6、其他运算符

func main() {
	// 定义变量
	// & 返回变量存储地址
	var a int = 60
	fmt.Println("a的值为:", a)
	fmt.Println("a对应的存储空间的地址为:", &a)

	// * 取指针指向的值
	var ptr *int = &a
	fmt.Println("指针ptr的值为:", ptr)
	fmt.Println("指针ptr指向的具体数值为:", *ptr)      
}

运行结果:

7、运算符优先级

优先级运算符
5* / % << >> & &^
4+ - | ^
3== != < <= > >=
2&&
1||

二元运算符的运算方向均是从左至右,表中运算符优先级由上至下代表优先级由高到低

可以通过()提高优先级

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值