go 运算符

运算符基本介绍

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

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

算术运算符

算术运算符是对数值类型的变量进行运算的

运算符运算示例结果
+正号+33
-负号-4-4
+5+510
-6-42
*3*412
/5/51
%取模(取余)7%52
++自增a=2 a++a=3
自减a=2 a–a=1
+字符串相加“he”+“llo”“hello”
package main

import (
	"fmt"
)

func main()  {
	fmt.Println(10 / 4)
	var n1 float32 = 10 / 4
	fmt.Println(n1)
	//希望保留小数,则需要有浮点数参与运算
	var n2 float32 = 10.0 /4
	fmt.Println(n2)

	fmt.Println(10%3)
	fmt.Println(-10%3)
	fmt.Println(10%-3)
	fmt.Println(-10%-3)
}

运行结果

2
2
2.5
1
-1
1
-1
func main()  {
	var i int = 10
	i++
	fmt.Println("i=", i)
	i--
	fmt.Println("i=", i)
}

算术运算符使用的注意事项

  • 对于除号 / , 它的整数除和小数除是有区别的: 整数之间做除法,只保留整数部分
  • 当对一个数取模时, 可以等价 a%b=a-a/b*b
  • golang的自增自减只能当做一个独立语言使用
package main

import (
	"fmt"
)

func main()  {
	var i int = 10
	var a int
	a = i++  // 错误
	a = i--  // 错误
	fmt.Println("a=", a)

	if i++ > 0 { //错误
		fmt.Println("ok")
	}
}
  • golang的 ++ 和 – 只能卸载变量的后面, 即: 只有 a++ 和 a–

  • golang 的设计者去掉c/java中的自增自减的容易混淆的写法,让golang更加简洁,统一(强制性的)

func main()  {
	var days int = 97
	var week int = days / 7
	var day int = days % 7
	fmt.Printf("%d个星期零%d天\n", week, day)

	var h float32 = 134.2
	var s float32 = 5.0 /9 * (h - 100)
	fmt.Printf("%v 对应的摄氏温度=%v", h, s)
}

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

  • 关系运算符的结果都是bool型
  • 关系表达式 用于条件或循环中
运算符运算示例结果
==等于4==3false
!=不等于4!=3true
<小于4<3false
>大于4>3true
<=小于等于4<=3false
>=大于等于4>=3true
func main()  {
	var n1 int = 9
	var n2 int = 8
	fmt.Println(n1 == n2)
	fmt.Println(n1 != n2)
	fmt.Println(n1 > n2)
	fmt.Println(n1 >= n2)
	fmt.Println(n1 < n2)
	fmt.Println(n1 <= n2)
	flag := n1 > n2
	fmt.Println("flag=", flag)
}

运行结果

false
true
true
true
false
false
flag= true

逻辑运算符

  • 用于连接多个条件(一般就是关系表达式),最终的结果也是一个bool值
运算符含义
&&
||
!
func main()  {
	var age int = 40
	if age > 30 && age < 50 {
		fmt.Println("ok1")
	}
	if age > 30 && age < 40 {
		fmt.Println("ok2")
	}
	if age > 30 || age < 50 {
		fmt.Println("ok3")
	}
	if age > 30 || age < 40 {
		fmt.Println("ok4")
	}
	if age > 30 {
		fmt.Println("ok5")
	}
	if !(age > 30) {
		fmt.Println("ok6")
	}
}

运行结果

ok1
ok3
ok4
ok5

逻辑运算符注意事项

  • &&也叫短路与: 如果第一个条件为false,则第二个条件不会判断,最终为false
  • || 也叫短路或: 如果第一个条件为true,则第二个条件不会判断,最终为true
package main

import (
	"fmt"
)

func test() bool {
	fmt.Println("test...")
	return true
}

func main()  {
	var i int = 10
	if i < 9 && test() {
		fmt.Println("ok...")
	}
	if i > 9 || test() {
		fmt.Println("hello...")
	}
}

赋值运算符

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

运算符示例含义
=c=a+b将a+b表达式的值赋值给c
+=c+=a等价于 c=c+a
-=c-=a等价于 c=c-a
*=c*=a等价于 c=c*a
/=c/=a等价于 c=c/a
%=c%=a等价于 c=c%a
<<=c<<=2等价于 c=c<<2
>>=c>>=2等价于 c=c>>2
&=c&=2等价于 c=c&2
|=c|=2等价于 c=c|2
^=c^=2等价于 c=c^2
func main()  {
	var i int
	i = 10
	fmt.Println("i=", i)

	a := 9
	b :=2
	fmt.Printf("交换前的情况是 a=%v, b=%v \n", a, b)
	t := a
	a = b
	b = t
	fmt.Printf("交换后的情况是 a=%v, b=%v \n", a, b)
	
	a += 17
	fmt.Println("a=", a)
}

赋值运算符的特点

  • 运算顺序从右往左
  • 赋值运算符的左边只能是变量,右边可以是变量,表达式,常量值

右两个变量,a和b, 要求将其进行交换,但是不允许使用中间变量

func main()  {
	var a int = 10
	var b int = 20
	fmt.Printf("a=%v, b=%v\n", a, b)
	a = a + b
	b = a - b
	a = a - b
	fmt.Printf("a=%v, b=%v\n", a, b)
}

位运算符

运算符含义
&按位与 双目运算符 有0得0,全1得1
|按位或 双目运算符 有1得1,全0得0
^按位异或 双目运算符
<<左移运算符 双目运算符
>>右移运算符 双目运算符

其它运算符

运算符含义实例
&返回变量存储地址&a 将给出变量的实际地址
*指针变量*a 是一个指针变量
func main()  {
	a := 100
	fmt.Println("a的地址=", &a)

	var ptr *int = &a
	fmt.Println("ptr 指向的值是=", *ptr)
}

求两个数的最大值

func main()  {
	var n1 int = 10
	var n2 int = 20
	var max int
	if n1 > n2 {
		max = n1
	} else {
		max = n2
	}
	fmt.Println("max=", max)
}

求三个数的最大值

func main()  {
	var n1 int = 10
	var n2 int = 20
	var n3 int = 50
	var max int
	if n1 > n2 {
		max = n1
	} else {
		max = n2
	}
	if n3 > max {
		max = n3
	}
	fmt.Println("三个数中最大值是", max)
}

特殊说明

go语言明确不支持三元运算符
golang的设计理念: 一种事情有且只有一种方法完成

运算符的优先级

分类对应符号关联性
后缀() [] -> . ++ –左到右
单目+ - ! ~ (type)* & sizeof右到左
乘法* / %左到右
加法+ -左到右
移位<< >>左到右
关系< <= > >=左到右
相等(关系)== !=左到右
按位与&左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或||左到右
赋值运算符= += -= *= /= %= >>= <<= &= ^= |=右到左
逗号,左到右

在这里插入图片描述

  • 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序
  • 只有单目运算符, 赋值运算符是从右到左运算的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wuxingge

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

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

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

打赏作者

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

抵扣说明:

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

余额充值