目录

运算符

💡 go里面的运算符其他语言并无太大区别

1. 算术运算符

1.1 加、减、乘、除,取余

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
var (
	a = 1
	b = 3
)

func main() {
	fmt.Println(a+b)
	fmt.Println(a-b)
	fmt.Println(a/b) // 0,这个没有python好,python直接输出0.33333333
	fmt.Println(a*b)
	fmt.Println(a%b) //1
}

1.2 自增,自减

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var (
	a = 1
	b = 3
)

func main() {
	a++ //这是独立的语句,不是赋值!python里这样写是会报错的
	b-- //它是直接修改了原变量的值!fmt.Println(a=a+1),fmt.Println(a++)这样都是错的!
	fmt.Println(a,b)  // 2 2
}

2. 关系运算符

看到这,想起来刚上大学那会学c语言的时候了,关系运算符在实际编码中最常用! 尤其是在[[if语法]]判断中经常用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var (
	a = 1
	b = 3
)
func main() {
	fmt.Println(a == b) // go语言是强类型,相同类型的变量才能比较
	fmt.Println(a != b)  
	fmt.Println(a >= b)
	fmt.Println(a <= b)
	fmt.Println(a < b)
}

3. 逻辑运算符

与或非在实际编码中常用,按位&、|、^也会使用到,可以很巧妙的实现我们需要的功能

3.1 逻辑与、逻辑或😀

这里在[[if语法]]里用的也很多。其余的在实际编码中用的场景比较少。除非专门搞数据运算之类会用到。用到了再去翻就好了,左移右移之类的涉及到二进制运算了。

1
2
3
4
5
6
7
age :=13
if age >=18 && age<=80{
	fmt.Println("事情要自己做哦")
}
if age<=18 || age>=80{
	fmt.Println("可以寻求帮助哦")
}

3.2 逻辑非

在if判断中经常用,if !ok {}

1
2
3
ismarried:=true
fmt.Println(ismarried)   // true
fmt.Println(!ismarried)  // false

3.3 按位与,或,非

1
2
3
4
5
6
7
8
func main() {
	// & 按位与(两位均位才为1)重要,但实际编程很少用 二进制
	fmt.Println(a&b)  //001 | 011
	// | 按位或(有一个为1就为1)重要
	fmt.Println(a|b)
	// ^ 亦或,不一样就为1
	fmt.Println(a^b)
}

out

1
2
3
1
3
2

3.4 左移右移

左移

1
2
fmt.Println(1<<2) //0001 ->0100
fmt.Println(1<<10)  //0001-> 10 0000 0000  1024

out

1
2
4
1024

右移

1
fmt.Println(5>>1) //0101-> 0010

out

1
2
注意移动范围
1
2
3
4
var m = int8(1) //只能移动8位  0000 0001
fmt.Println(m << 10)      // 0 
fmt.Println(1<<10)        // 1024
fmt.Println(int64(1)<<10) //1024

4. 赋值运算符

4.1 基础赋值运算符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var x int  = 10
x +=1
fmt.Println(x) //不能直接打印fmt.Println(x +=1),python里这样写也会报错的!

x -=1
fmt.Println(x)

x *=10
fmt.Println(x)

x /=10
fmt.Println(x)

x %=2
fmt.Println(x)

out

1
2
3
4
5
11
10
100
10
0

4.2 逻辑赋值运算符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var x = 1
x <<=2     // 0001  ->0100
fmt.Println(x)

x &=2    // 0100 & 0010
fmt.Println(x)

x |=2   // 0000 | 0010
fmt.Println(x)

x ^=2  //0010 ^ 0010
fmt.Println(x)

x >>=2
fmt.Println(x)  // fmt.Println(x >>=2)是错的,但是可以fmt.Println(x >>2)

out

1
2
3
4
5
4
0
2
0
0