算数运算符
/*
算术运算符:+,-,*,/,%,++,--
*/
a := 10
b := 3
sum := a + b //加减乘类似
fmt.Printf("%d + %d = %d\n", a, b, sum)
div := a / b //取商
mod := a % b //取余,取模
fmt.Printf("%d ÷ %d = 商%d,余%d\n", a, b, div, mod)
b++
fmt.Println(b)
b--
fmt.Println(b)
关系运算符
/*
关系运算符:>,<,>=,<=,==,!=
关系运算结果总是bool类型:true,false
*/
res1 := a > b //true
res2 := a < b //false
res3 := a == b //false
res4 := a != b //true
fmt.Println(res1, res2, res3, res4)
逻辑运算符
/*
逻辑运算符:操作数必须是bool,运算结果也是bool
逻辑与:&&
逻辑或:||
逻辑非:!
*/
f1 := true
f2 := false
f3 := false
r1 := f1 && f2 //false
r2 := f1 && f2 && f3 //false
fmt.Println(r1, r2)
r3 := f1 || f2 //true
r4 := f1 || f2 || f3 //true
r5 := f2 || f3 //false
fmt.Println(r3, r4, r5)
r6 := !f1 //false
fmt.Println(r6)
位运算符
/*
位运算符:将数值,转为二进制后,按位操作
按位与:&
对应位的值都为1才为1,有一个为0就为0
按位或:|
对应位的值都为0才位0,有一个位1就位1
异或:^
二元:a^b,对应位的值相同则为0,不同则为1
一元:^a,按位取反,1->0, 0->1
位清空:&^
a &^ b, 对于b上的每位数值
如果为0,则取a对应位上的数值
如果位1,则取0
按位左移:<<, a << b, 将a转为二进制,向左移动b位
按位右移:>>, a >> b, 将a转为二进制,向右移动b位
*/
v1 := 60 //二进制:0011 1100
v2 := 13 //二进制:0000 1101
fmt.Printf("%d,%b\n", v1, v1)
fmt.Printf("%d,%b\n", v2, v2)
w1 := v1 & v2 //0000 1100
w2 := v1 | v2 //0011 1101
w3 := v1 ^ v2 //0011 0001
w4 := v1 &^ v2 //0011 0000
fmt.Printf("%d,%b\n", w1, w1)
fmt.Printf("%d,%b\n", w2, w2)
fmt.Printf("%d,%b\n", w3, w3)
fmt.Printf("%d,%b\n", w4, w4)
fmt.Printf("%d,%b\n", ^v1, ^v1)
w5 := v1 << 2 //1111 0000
fmt.Printf("%d,%b\n", w5, w5)
赋值运算符
/*
赋值运算符:
=, +=, -=, *=, /=, %=, <=, >=, &=, |=, ^=
=, 右侧数值赋值给左边变量
+=, a += 2 相当于a = a + 2。
-=, *=, /=, %= 与 += 类似
*/