Golang 内置的运算符
算术运算符
关系运算符
逻辑运算符
位运算符(不常用)
赋值运算符
算数运算符
| 运算符 | 描述 |
|---|---|
| + | 相加 |
| - | 相减 |
| * | 相乘 |
| / | 相除 |
| % | 求余 |
a := 10
b := 9
fmt.Printf("a+b的值为%v\na-b的值为%v\na*b的值为%v\n",a+b,a-b,a*b)

除法注意:如果运算的数都是整数,那么除后,去掉小数部分,保留整数部分
a := 15
b := 5
fmt.Println(a / b)
var c float32 = 9.9
d := 3
fmt.Println(c / float32(d))
var c0 = 9.9
d0 := 3.0
fmt.Println(c0 / d0)
取余注意 余数=被除数-(被除数/除数)*除数
var a = 10
var b = 3
fmt.Println(a % b) //1
fmt.Println(-10 % 3) // - 10 - (-10/3)*3 =-1
fmt.Println(10 % -3) // 10-(10/-3)*-3=1
注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。
且在 golang 中没有前++,为 错误写法
var i int = 8
var a int
a = i++ //错误,i++只能独立使用
a = i-- //错误, i--只能独立使用
fmt.Ptintln(a)
var a = 12
++a //错误写法
fmt.Println(a)
正确的写法
var a = 1
a++
a--
fmt.Println(a)

关系运算符
| 运算符 | 描述 |
|---|---|
| == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
| != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
| > | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
| >= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
| < | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
| <= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
a := 10
b := 12
fmt.Println(a == b)
fmt.Println(a != b)
fmt.Println(a > b)
fmt.Println(a < b)
fmt.Println(a >= b)
fmt.Println(a <= b)

var a1 = 9
var a2 = 14
flag := a1 > a2
if flag {
fmt.Println("a1>a2")
}else{
fmt.Println("返回为空")
}
a0 := 11
b0 :=20
flog := a0 < b0
if flog {
fmt.Println("a0<b0")
}else{
fmt.Println("a0 > b0")
}

逻辑运算符
| 运算符 | 描述 |
|---|---|
| && | 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 |
| ll | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 |
| ! | 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 |
逻辑 AND 运算符
var a = 18
var b = 8
fmt.Println(a > 10 && b < 10)
fmt.Println(a > 24 && b < 10)
fmt.Println(a > 5 && b < 6)
fmt.Println(a == 5 && b < 6)
逻辑 OR 运算符
var a = 23
var b = 8
fmt.Println(a > 10 || b < 10)
fmt.Println(a > 24 || b < 10)
fmt.Println(a > 5 || b < 6)
fmt.Println(a == 5 || b < 6)
逻辑 NOT 运算符
flag := false
fmt.Println(!flag)

逻辑与和逻辑或短路
逻辑与:前面是false后面就不会执行
//定义一个方法
func test() bool {
fmt.Println("方法执行了呢")
return true
}
var a = 10
if a > 9 && test() {
fmt.Println("执行")
}
var a = 10
if a > 11 && test() {
fmt.Println("执行")
}else{
fmt.Println("比错了奥,有问题了")
}

逻辑或:前面是true后面就不会执行
var a = 10
if a > 11 || test() {
fmt.Println("执行")
}

var a = 10
if a < 11 || test() {
fmt.Println("执行")
}

赋值运算符
| 运算符 | 描述 |
|---|---|
| = | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
| += | 相加后再赋值 |
| -= | 相减后再赋值 |
| *= | 相乘后再赋值 |
| /= | 相除后再赋值 |
| %= | 求余后再赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后赋值 |
| &= | 按位与后赋值 |
| l= | 按位或后赋值 |
| ^= | 按位异或后赋值 |
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 + 20;
fmt.Println(num3)
}
var a = 20
a = 21
fmt.Println(a)
// var a = 23 + 2
// fmt.Println(a)
// var a = 10
// b := a
// fmt.Println(b)
// var a = 10
// b := a + 2
// fmt.Println(b)
// var a = 10
// a += 3 // 等价于a=a+3
// fmt.Println(a)
// var a = 10
// a = a + 3
// fmt.Println(a)
// var a = 10
// a -= 3 //a=a-3
// fmt.Println(a)
// var a = 10
// a *= 3 //a=a*3
// fmt.Println(a)
// var a = 10
// a /= 3 // a=a/3
// fmt.Println(a) //结果:3
// var a float64 = 10
// a /= 3 // a=a/3
// fmt.Println(a) //结果:3.3333333333333335
// var a = 10
// a %= 3 // a=a%3
// fmt.Println(a) //1
位运算符(了解即可;涉及二进制间转换)
位运算符对整数在内存中的二进制位进行操作。
| 运算符 | 描述 |
|---|---|
| & | 参与运算的两数各对应的二进位相与。(两位均为1才为1) |
| l | 参与运算的两数各对应的二进位相或。(两位有一个为1就为1) |
| ^ | 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(两位不一样则为1) |
| << | 左移n位就是乘以2的n次方。“a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。 |
| >> | 右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。 |
var a = 5 // 101
var b = 2 // 010
fmt.Println("a&b=", a&b) // 000 值0
fmt.Println("a|b=", a|b) // 111 值7
fmt.Println("a^b=", a^b) // 111 值7
fmt.Println("a<<b=", a<<b) // 10100 值20 5*2的2次方
fmt.Println("a>>b=", a>>b) // 值1 5/2的2次方
位运算符是十转二进制后,竖着相对比
最后输出的值为二进制还需要转为十进制输出


















![[C++] C++11新特性介绍 分析(2): lambda表达式、function包装器、bind()接口](https://img-blog.csdnimg.cn/img_convert/aefedde385bba8b37392c9fe9d2b724c.png)
