一、运算符
1.1 算数运算符
+ - * / %(取余) ++ --
用例:
package main
import "fmt"
func main(){
/*
算数运算符: + - * / % ++ --
*/
a := 10
b := 3
sum := a + b
fmt.Printf("%d + %d = %d\n", a, b, sum)
sub := a - b
fmt.Printf("%d - %d = %d\n", a, b, sub)
mul := a * b
fmt.Printf("%d * %d = %d\n", a, b, mul)
div := a / b // 取商
fmt.Printf("%d / %d = %d\n", a, b, div)
mod := a % b // 取余
fmt.Printf("%d %% %d = %d\n", a, b, mod)
c := 3
c ++
fmt.Println("c = ", c)
d := 3
d --
fmt.Println("d = ", d)
}
控制台输出:
$ go run xxx.go
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3
10 % 3 = 1
c = 4
d = 2
1.2 关系运算符
== != > < >= <=
1.3 逻辑运算符
&& || !
1.4 位运算符
& | ^ &^ << >>
1.4.1 位运算
A | B | A&B | A|B | A^B |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
用例:假设A为60,B为13
运算 | 描述 | 示例 |
---|---|---|
& | 二进制与操作副本位的结果,如果它存在于两个操作数 | (A&B) = 12,也就是0000 1100 |
| | 二进制或操作副本,如果它存在一个操作数 | (A|B) = 61,也就是0011 1101 |
^ | 二进制疑惑操作副本,如果它被设置在一个操作数就是按位取非 | (A^B)=49,也就是0011 0001 |
&^ | 二进制位清空&^ | (A&^B)=48,也就是110000 |
位清空:$^
- 对于
a $^ b
- 对于b上的每个数值
- 如果为0,则取a对应位上的数值
- 如果为1,则结果位为0
package main
import "fmt"
func main(){
/*
算数运算符: + - * / % ++ --
*/
a := 60
b := 13
/*
a: 60 0011 1100
b: 13 0000 1101
& 0000 1100
| 0011 1101
^ 0011 0001
&^ 0011 0000
*/
fmt.Printf("a:%d, %b\n",a,a)
fmt.Printf("b:%d, %b\n",b,b)
res1 := a & b
fmt.Printf("res1:%d, %b\n",res1,res1) //12
res2 := a | b
fmt.Printf("res2:%d, %b\n",res2,res2) //61
res3 := a ^ b
fmt.Printf("res3:%d, %b\n",res3,res3) //49
res4 := a &^ b
fmt.Printf("res4:%d, %b\n",res4,res4) //48
}
控制台输出:
$ go run xxx.go
a:60, 111100
b:13, 1101
res1:12, 1100
res2:61, 111101
res3:49, 110001
res4:48, 110000
1.4.2 位移运算符
<<:按位左移,将a转为二进制,向左移动b位,等价于乘2的b次方
>>:按位右移,将a转为二进制,向右移动b位,等价于除2的b次方
用例:
c := 8
res5 := c << 2
fmt.Printf("res5:%d, %b\n",res5,res5) //32
res6 := c >> 2
fmt.Printf("res6:%d, %b\n",res6,res6) //2
控制台输出:
res5:32, 100000
res6:2, 10
1.5 赋值运算符
运算符 | 描述 | 示例 |
---|---|---|
= | 赋值操作符 | 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 |