go运算符

本文介绍了Go语言中的各种运算符,包括算术运算符(如加、减、乘、除等),赋值运算符(如=、+=等),关系运算符(如==、!=等),逻辑运算符(如&&、||等),以及其他特殊运算符如取地址符(&)和指针解引用符(*)。还探讨了运算符的优先级以及如何在Go中获取用户终端输入的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、算术运算符

算术运算符有:加(+)、减(-)、乘(*)、除(/)、取余(%)、加加(++)、减减(–)

作用:是对数值类型的变量进行的运算。

示例:

package main

import "fmt"

func main() {
	//算术运算符  arithmetic
	//加(+)
	var n1 int = +10
	fmt.Printf("n1 的值为: %d\n", n1) // 10  标识正数
	var n2 int = 14 + 7
	fmt.Printf("n2的值为:%d\n", n2) // 21  相加
	var s1 string = "abc" + "def"
	fmt.Printf("s1的值为;%s\n", s1) // abcdef  类型为字符串时,字符串拼接

	//减(-)
	var n3 int = 10 - 4
	fmt.Printf("n3的值为:%d\n", n3)
	//乘(*)
	var n4 int = 10 * 4
	fmt.Printf("n4的值为:%d\n", n4)
	//除(/)
	var n5 int = 10 / 2 //int类型数据运算,结果一定 为整数类型
	fmt.Printf("n5的值为:%d\n", n5)
	var n6 float32 = 10.2 / 2 //浮点型运算,结果一定是浮点类型
	fmt.Printf("n6的值为:%f\n", n6)
	//取余(%) 等价公式:a%b = a - a/b*b
	var n7 int = 10 % 3    // 10%3 = 10 - 10/3*3 = 1
	var n8 int = -10 % 3   // -1
	var n9 int = 10 % -3   // 1
	var n10 int = -10 % -3 // -1
	fmt.Printf("n7的值为:%d\n", n7)
	fmt.Printf("n8的值为:%d\n", n8)
	fmt.Printf("n9的值为:%d\n", n9)
	fmt.Printf("n10的值为:%d\n", n10)
	//加加(++)  自增  加1操作
	var n11 int = 10
	n11++
	fmt.Printf("n11的值为:%d\n", n11) //11
	//减减(--) 自减  减1操作
	var n12 int = 10
	n12--
	fmt.Printf("n12的值为:%d\n", n12) //9

	//说明:go语言里,++,--操作只能写到变量后面,不能写到变量前面。
	//++n12;  这是错误的用法,这根其他语言有区别
}

执行结果:

n1 的值为: 10
n2的值为:21      
s1的值为;abcdef  
n3的值为:6       
n4的值为:40      
n5的值为:5       
n6的值为:5.100000
n7的值为:1       
n8的值为:-1      
n9的值为:1       
n10的值为:-1     
n11的值为:11     
n12的值为:9    

二、赋值运算符

赋值运算符有:=、+=、-=、*=、/=、%=

定义:将运算后的值,赋给指定变量

示例:

package main

import "fmt"

func main() {
	var n1 int = 10
	fmt.Println(n1) //10

	var n2 int = (10+2)%3 + 3 - 2
	fmt.Println(n2) //1

	var n3 int = 10
	n3 += 20        //加等   等价于:n3 = n3 + 20
	fmt.Println(n3) //30

}

运行结果:

10
1 
30

三、关系运算符

关系运算符有:==、!=、> 、<、 >=、 <=

关系运算的结果都是布尔类型,即为true或false

经常用在流程的控制中

示例:

package main

import "fmt"

func main() {
	fmt.Println(10 == 2) //false
	fmt.Println(10 != 2) //true
	fmt.Println(10 > 2) //true
	fmt.Println(10 < 2) //false
	fmt.Println(10 >= 2) //true
	fmt.Println(10 <= 2) //false
}

结果:

false
true 
true 
false
true 
false

四、逻辑运算符

逻辑运算符有:&&(逻辑与/短路与) 、||(逻辑或/短路或)、 !(逻辑非)

示例:

package main

import "fmt"

func main() {
	// && 逻辑与 :两个值或表达式只要一侧是false,结果一定是false。
	//又叫短路与:有一个为false,后面的不参与运算了,结果直接就是false。   提高运算效率
	fmt.Println(true && true)   //true
	fmt.Println(true && false)  //false
	fmt.Println(false && true)  //false
	fmt.Println(false && false) //false

	// || 逻辑或 : 两个值或表达式只要一侧为true,则结果一定为true
	//又叫短路或:只要一侧为true,后面的就不参与运算了,结果直接是true。   提高运算效率
	fmt.Println(true || true)   //true
	fmt.Println(true || false)  //true
	fmt.Println(false || true)  //true
	fmt.Println(false || false) //false

	// ! 逻辑非:取相反结果
	fmt.Println(!true)  //false
	fmt.Println(!false) //true
}

结果:

true
false
false
false
true 
true 
true 
false
false
true 

五、其他运算符

其他运算符有:&(变量存储地址)、*(指针变量对应的数值)

示例:

package main

import "fmt"

func main() {
	//定义变量
	var age int = 10
	fmt.Println("age对应的存储空间的地址为:", &age) //0xc000018098

	var ptr *int = &age
	fmt.Println(ptr)                      //0xc000018098
	fmt.Println("ptr这个指针指向的具体数值为:", *ptr) //10
}

结果:

age对应的存储空间的地址为: 0xc000018098
0xc000018098                    
ptr这个指针指向的具体数值为: 10

六、运算符的优先级

go语言有几十种运算符,被分成了十几个级别。优先级级别请看下表:

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

七、获取用户终端输入

如果需要接收用户输入的数据,可以使用键盘输入语句来获取。

API:

Scanln类似Scan,但会在换行时才能停止扫描。最后一个条目后必须有换行或者到达结束位置。

func Scanln(1 ...interface{})(n int, err error)

Scanf从标准输入扫描文本,根据format参数指定的格式将成功读取的空白分隔的值保存进成功传递给本函数的参数。返回成功扫描的条目个数和遇到的任何错误。

func Scanf(format string, a ...interface{})(n int, err error)

示例:

package main

import "fmt"

func main() {
	//实现功能:键盘录入学生的年龄、姓名、成绩、是否VIP

	////方式1 : Scanln
	//var age int
	//fmt.Println("请输入学生的年龄:")
	////传入age地址的目的地:在Scanln函数中,对地址中的值进行改变的时候,实际外面的age被影响了
	//fmt.Scanln(&age) //录入数据的时候,类型一定要匹配,因为底层会自动判断类型
	//
	//var name string
	//fmt.Println("请输入学生姓名:")
	//fmt.Scanln(&name)
	//var score float32
	//fmt.Println("请输入学生分数:")
	//fmt.Scanln(&score)
	//var isVIP bool
	//fmt.Println("请输入是否VIP:")
	//fmt.Scanln(&isVIP)

	//方式2:Scanf
	var age2 int
	var name2 string
	var score2 float32
	var isVIP2 bool
	fmt.Println("请录入学生的年龄,姓名,成绩,是否VIP,使用空格进行分隔")
	fmt.Scanf("%d %s %f %t", &age2, &name2, &score2, &isVIP2)
	//将上述数据在控制台打印输出
	fmt.Printf("学生的年龄为:%v, 姓名为:%v, 成绩为:%v, 是否VIP: %v", age2, name2, score2, isVIP2)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

h_and_g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值