Go 运算符 电脑版发表于:2020/8/16 15:52 ![go数据类型](https://img.tnblog.net/arcimg/hb/0dd243ae49394f12beed84237bfee1a3.jpg "go数据类型") >#Go 运算符 [TOC] 算术运算符 ------------ tn>当A为10,B为20时 | 运算符 | 描述 | 实例 | | ------------ | ------------ | ------------ | | + | 相加 | A + B 输出结果 30 | | - | 相减 | A - B 输出结果 -10 | | * | 相乘 | A * B 输出结果 200 | | / | 相除 | B / A 结果输出为2 | | % | 求余 | B % A 输出结果0 | | ++ | 自增 | A++ 输出结果 11 | | -- | 自减 | A-- 输出结果 9 | tn>Go 语言没有前置的++,--,~~(++a)~~ 比较运算符 ------------ | 运算符 | 描述 | 实例 | | ------------ | ------------ | ------------ | | == | 检查两个值是否相等,如果相等返回 True 否则返回 False。 | (A==B)为 False | | != | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 | (A!=B)为 True | | > | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 | (A > B)为 False | | < | 检查左边值是否小于右边的值,如果是返回 True 否则返回 False。 | (A < B)为 True | | >= | 检查左边的值是否大于等于右边的值相等,如果是返回 True 否则返回 False。 | (A>=B)为 False | | <= | 检查左边的值是否小于等于右边的值相等,如果是返回 True 否则返回 False。 | (A>=B)为 True | 用 == 比较数据 ------------ >###比较规则 - 相同位数且含有相同个数的数组才可以比较 - 每个元素都相同的才相等 >###示例 <br/> >创建一个 `operator_test.go` 文件 ![golang](https://img.tnblog.net/arcimg/hb/78619fbb038a499685721d8b425041a6.png "golang") <br/> >数组代码示例 ```go package operator_test import "testing" func TestCompareArray(t *testing.T) { a := [...]int{1, 2, 3, 4} b := [...]int{1, 2, 4, 3} //c := [...]int{1, 2, 3, 4, 5} d := [...]int{1, 2, 3, 4} t.Log(a == b) //首先呢,我们可以看见a与c编译错误,是因为它们对长度不同所导致的 //t.Log(a == c) t.Log(a == d) } ``` >运行结果 ![](https://img.tnblog.net/arcimg/hb/deddcba582c442faa50dd02338d5bcc3.png) 逻辑运算符 ------------ | 运算符 | 描述 | 实例 | | ------------ | ------------ | ------------ | | && | 逻辑 And 运算符。如果两边都为True,则条件为True,否则条件为 False | (A && B)为 False | | || | 逻辑 Or 运算符。如果两边一边为True,则条件为True,否则条件为 False | (A ||B)为 True | | ! | 逻辑 Not 运算符。如果条件为True,则逻辑 Not 结果为False,否则为 False | !(A && B)为 True | 位运算符 ------------ | 运算符 | 描述 | 实例 | | ------------ | ------------ | ------------ | | & | 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。 | A为14,B为13时,(A & B)结果为 12,二进制为 0000 1100 | | | | 按位或运算符"|"是双目运算符。其功能是参与运算的两数各对应的二进位相或。 | A为52,B为9时,(A | B)结果为61,二进制为 0011 1101 | | ^ | 按位异或运算符"^"是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进制位相异或时,结果取相反值。 |(A ^ B)结果为49,二进制为 0011 0001 | | << | 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。其功能把"<<"左边的运算数的各二进位左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补 | 当A为60,A << 2 结果为240,二进制为 1111 0000 | | >> | 右移运算符">>"是双目运算符。右移n位就是乘以2的n次方。其功能把">>"右边的运算数的各二进位右移若干位,由">>"左边的数指定移动的位数。 | 当A为60,A >> 2 结果为15,二进制为 0000 1111 | tn>与其他主要编程语言的主要差异 `&^ 按位置0` ```bash 1 &^ 0 -- 1 1 &^ 1 -- 0 0 &^ 1 -- 0 0 &^ 0 -- 0 ``` >###示例 <br/> >代码示例 ```go package operator_test import "testing" const ( Readable = 1 << iota Writable Executable ) func TestCompareArray(t *testing.T) { a := [...]int{1, 2, 3, 4} b := [...]int{1, 2, 4, 3} //c := [...]int{1, 2, 3, 4, 5} d := [...]int{1, 2, 3, 4} t.Log(a == b) //首先呢,我们可以看见a与c编译错误,是因为它们对长度不同所导致的 //t.Log(a == c) t.Log(a == d) } func TestBitClear(t *testing.T) { a := 7 //0111 a = a &^ Readable t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) } ``` >运行结果 ![](https://img.tnblog.net/arcimg/hb/1e1d3ec48a5a4418baf7e24604535b75.png)