2.3 运算符
peter 453 3

算数运算符

算数运算符与其他语言基本没有太多的不同。

Note: 此处 A = 10,B = 20

运算符 描述 实例
+ 相加 A + B = 30
- 相减 A - B = -10
* 相乘 A * B = 200
/ 相除 B / A = 2
% 求余 B % A = 0
++ 自增 A++ = 11
-- 自减 A-- = 9

提示: Go 语言没有前置的 ++ 或 --

比较运算符

运算符 描述 实例
== 检查两个值是否相等,相等返回 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

用 == 比较数组

  • 相同维数且含有相同个数元素的数组才可以比较
  • 每个元素都相同的才相等

在其他的编程语言中,数组一般都是引用类型,数组之间的比较最终都是引用类型的比较,而不是比较里面的值是否相同。

测试实例 1

package operator_test

import "testing"

func TestCompareArray(t *testing.T) {
    a := [...]int{1, 2, 3, 4}
    b := [...]int{1, 3, 4, 5}
    c := [...]int{1, 2, 3, 4, 5}
    d := [...]int{1, 2, 3, 4}
    t.Log(a == b) // 输出:false
    t.Log(a == c) // 编译错误:invalid operation: a == c (mismatched types [4]int and [5]int)
    t.Log(a == d) // 输出:false
}

逻辑运算符

运算符 描述 实例
&& 逻辑 AND 运算符。如果两边操作数都为 True,则条件 True,否则 False A && B = False
|| 逻辑 OR 运算符。如果两边操作数有一个 True,则条件 True,否则 False A || B = True
逻辑 NOT 运算符。如果条件为 True,则逻辑 NOT 条件为 False,否则False !(A && B) = True

位运算符

运算符 描述 实例
& 参与运算的两数各对应的二进制位相与 A & B = 12
| 参与运算的两数各对应的二进位相或 A | B = 61
^ 参与运算的两数各对应的二进位相异或 A ^ B = 49
<< 左移 n 位就是乘以 2 的 n 次方 A << 2 = 240
>> 右移 n 位就是除以 2 的 n 次方 A >> 2 = 15

与其他主要编程语言差异

Go 语言为了提高生产力,提供了 &^ 按位置 0 运算符

如果右边的对应的位数位1,那么不管左边对应的位数是0还是1都清零

如果右边的对应的位数位0,那么结果与左边对应的位数一致。

1 &^ 0 = 1

1 &^ 1 = 0

0 &^ 1 = 0

0 &^ 0 = 0

测试实例 2

package operator_test

import "testing"

const (
    Readable = 1 << iota
    Writeable
    Executable
)

func TestBitClear(t *testing.T) {
    // 7 -> 0111
    a := 7
    a = a &^ Readable   // 0111 &^ 0001 -> 0110
    a = a &^ Executable // 0110 &^ 0100 -> 0010
    t.Log(a&Readable == Readable, a&Writeable == Writeable, a&Executable == Executable)
}
评论区

索引目录