Go语言学习之路-4-Go语言运算符

了解运算符

运算符运算符是一种告诉程序执行特定的数学或逻辑操作的符号

Go语言运算符有5种:

运算符名称 运算符简述
算术运算符 加减乘除运算
关系运算符 关系运算符有6种关系,分别为小于、大于、小于等于、大于等于、等于、不等于
逻辑运算符 或者、并且、反义词(如果为真(True)就取反义词(False)、如果为假(Flase)就取反义词(True))
位运算符 二进制操作符
赋值运算符 把某个值赋值给某个变量

算术运算符

运算符 描述
+ 相加 fmt.Println(1 + 1) // 相加结果为2
- 相减 fmt.Println(1 - 1) // 相减结果为0
* 相乘 fmt.Println(6 * 6) // 相乘结果为36
/ 相除 fmt.Println(36 / 5) // 相除结果为7,余数为1,下面是取余
% 求余 fmt.Println(36 / 5) // 求余数,36除以5,结果为7余数为1

++和--形成单独的语句,所以他们并没有归类到算术运算符里

package main

import (
	"fmt"
)

func main() {
	var a int = 10
	var b int8 = 100
	var c float32 = 10.1
	var d float64 = 100.1
	a++
	b++
	c--
	d--
	fmt.Println(a, b, c, d)
}

/*
结果:
11 101 9.1 99.1
*/

关系运算符

运算符 描述
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False
== 检查两个值是否相等,如果相等返回 True 否则返回 False
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False
package main

import (
	"fmt"
)

func main() {
	fmt.Println(10 > 1)
	fmt.Println(1 < 10)
	fmt.Println(10 == 10)
	fmt.Println(10 >= 1)
	fmt.Println(1 <= 10)
	fmt.Println(10 != 1)
}

逻辑运算符

运算符 描述
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False
! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True
package main

import (
	"fmt"
)

func main() {
	fmt.Println(10 > 1 && 10 > 100)
	fmt.Println(10 > 1 || 10 > 100)
	// !
	fmt.Println(!(10 > 100))
	fmt.Println(10 != 1)
}

/*
结果:
false
true
true
true
*/

位运算符

运算符 描述
& 参与运算的两数各对应的二进位相与。(二进制位对比,都为1那么这个二进制位才为1)
| 参与运算的两数各对应的二进位相或。(二进制位对比,两位有一个为1就为1)
^ 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。(二进制位,两位不一样则为1)
<< 左移n位就是乘以2的n次方。 “a<<b”是把a的各二进位全部左移b位,高位丢弃,低位补0。
>> 右移n位就是除以2的n次方。“a>>b”是把a的各二进位全部右移b位。

位运算符一般用的比较少,由于它的运算速度以及在特定情况下它的作用非常NICE很多源码里场景比较多看下面几个典型例子

位运算:相与实例

package main

import "fmt"

func main() {
	a, b := 4, 5

	fmt.Printf("a的int值: %d, a的二进制: %b | b的int值: %d, b的二进制: %b\n", a, a, b, b)

	// & 相与的两个二进制位同为1,那么才为1
	c := a & b
	fmt.Printf("c的int值: %d, c的二进制: %b\n", c, c)
	// & 相与的应用场景判断奇偶数
	fmt.Println(IsOdd(10))
}

// IsOdd 任意数和1相与,判断传递过来的数的二进制最后一位是1还是0  是1则为奇数 0则为偶数
func IsOdd(i int) bool {
	return (i & 1) == 1
}

位运算: 移动的例子

package main

import "fmt"

// ByteSize 为了更好的区分变量类型标识它是定义大小的变量重新声明一个
type ByteSize float64

const (
	// B 字节
	B ByteSize = 1 << (10 * iota) // 1<<(10*0)
	// KB = 1024 B  (1<<(10*1) 左移动10位  2的10次方=1024 个字节)
	KB
	// MB = 1024 KB (1<<(10*2) 左移动20位  2的20次方=1048576 个字节 )
	MB
	// GB = 1024 MB (1<<(10*3) 左移动30位  2的30次方=1073741824 个字节)
	GB // 1<<(10*3)
	// TB = 1024 GB (1<<(10*4) 左移动40位  2的40次方=1099511627776 个字节)
	TB
	// PB = 1024 TB (1<<(10*5) 做移动50位  2的50次方=1125899906842624 个字节)
	PB
)

func main() {
	fmt.Println(B, KB, MB, GB, TB, PB)
}

赋值运算

运算符 描述
= 简单的赋值运算符,将一个右边表达式的值复制给左边
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异或后赋值
posted @ 2020-12-23 22:36  天帅  阅读(139)  评论(0编辑  收藏  举报