Go 学习笔记:运算符

1,354 阅读3分钟

算术运算符

Go 语言中,常见的可用于整数、浮点数和复数的二元运算符有:

  • +
  • -
  • *
  • /:除,对于整数运算结果仍是整数,如 5 / 2 -> 2
  • %:取余,仅用于整数

用于整数和浮点数的一元运算符:

  • ++:自增
  • --:自减

注意

  • intint8 等是不同的类型,不能互相直接运算。即使 int 的大小是 32 bit,仍然和 int32 属于不同类型。不同类型之间,不能直接运算,除非显式的类型转换;
  • 在运算时“溢出”不会产生错误,Go 会简单地将超出位数抛弃。如果需要范围无限大的整数或者有理数,可以使用标准库中的 big 包;
  • 0 作为除数,会有错误;
  • 取余运算符 % 只能作用于整数;
  • 带有 ++-- 的只能作为语句,而非表达式,如 n := i++ 错误。其它一些可以用于 CC++Java 中的写法在 Go 中也是不允许的,如 f(i++)a[i]=b[i++] 等。

关系运算符

两个相同的类型可以使用下面的二元比较运算符进行比较,结果是布尔类型:

  • == 等于
  • != 不等于
  • < 小于
  • <= 小于等于
  • > 大于
  • >= 大于等于

布尔型、数字类型和字符串等基本类型都是可比较的,也就是说两个相同类型的值可以用 ==!= 进行比较。整数、浮点数和字符串可以根据比较结果排序,许多其它类型的值可能是不可比较的,也就是不可排序。

逻辑运算符

Go 语言中的逻辑运算符:

  • &&:逻辑与,如果两个操作数都是 true,则结果是 true
  • ||:逻辑或,如果两个操作数有一个为 true,则结果为 true
  • !:逻辑非

按位运算符

按位运算符是对整数在内存中的二进制位进行操作。例如,一个字节 8 位:

  • 0 在内存中表示 00000000
  • 1 在内存中表示 00000001

按位运算符只能用于同类型的整数类型。

  • &:按位与,都为 1 时结果为 1
  • |:按位或,有一个为 1,结果为 1
  • ^:按位异或,对应位不同时,结果为 1。用作一元运算符时,按位取反
  • &^:按位零,将指定位置上的值设置为 0
  • <<:左移,整体向左移动
  • >>:右移,整体向右移动

举例:

0: 00000000
1: 00000001

按位与 &:都为 1 时结果为 1

1 & 1 -> 1
00000001 -> 1
00000001 -> 1
00000001 -> 1


1 & 0 -> 0
00000001 -> 1
00000000 -> 0
00000000 -> 0

按位或 |:有一个为 1,结果为 1

1 | 1 -> 1
00000001 -> 1
00000001 -> 1
00000001 -> 1


1 | 0 -> 0
00000001 -> 1
00000000 -> 0
00000001 -> 1

赋值运算符

运算后将值赋予前面的变量:

  • =
  • +=
  • -=
  • *=
  • /=
  • %=
  • <<=
  • >>=
  • &=
  • ^=
  • |=