基本运算符

算数运算符

  1. 适用于数值类型,运算结果类型与除数类型一致。(除数是浮点数结果为浮点数,除数为整数结果为整数)
  2. 求余(%)运算结果符号与除数符号一致(除数是负数结果符号为负数)。
运算符 描述 适用范围 示例
+ 加法运算符或字符串拼接符 适用于整数、浮点数、复数、字符串 5 + 3 = 8
- 减法运算符 适用于整数、浮点数、复数 5 - 3 = 2
* 乘法运算符 适用于整数、浮点数、复数 5 * 3 = 15
/ 除法运算符 适用于整数、浮点数、复数 5 / 2 = 2
% 求余运算 适用于整数(有符号、无符号) -5 % 2 = -1-5 % -2 = -15 % 2 = 1
++ 自增 适用于整数(有符号、无符号) a++
-- 自减 适用于整数(有符号、无符号) a--
变量 变量 取余
x y x/y x%y
5 3 1 2
-5 3 -1 -2
5 -3 -1 2
-5 -3 1 -2

关系运算符

  1. 双目运算符作比较,结果为布尔值。
运算符 含义 示例(A 小于 B)
== 等于 A == B false
!= 不等于 A != B true
> 大于 A > B false
< 小于 A < B true
>= 大于等于 A >= B false
<= 小于等于 A <= B true

逻辑运算符

  1. 双目运算符,处理左右布尔值。
运算符 描述 示例
&& 逻辑与运算符(左右两边都为true返回true,否则返回false (true && false) == false
|| 逻辑或运算符(左右两边都为false返回false,否则返回true (false || false) == false
! 逻辑非运算符(一位运算符true取反为falsefalse取反为true !true == false

位运算符

  1. 操作二进制数。
运算符 含义
& 按为与,双目运算符。参与运算的两数各对应的位相与(同1得1
| 按为或,双目运算符。参与运算的两数各对应的位相或(有1得1
^ 按为异或,双目运算符。参与运算的两数各对应的位异或(相同得0)或 ^作为一元运算符是按位取反
« 左移运算符,双目运算符。把左边的运算数的各位全部左移若干位,高位丢弃,低位补0
» 右移运算符,双目运算符。把右边的运算数的各位全部左移若干位
变量1 变量2 与运算 或运算 异或运算
p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
变量1 变量2 左移运算 右移运算
p q p<<q p>>q
00001101 3 01101000 00000001

赋值运算符

运算符 含义 示例
= 赋值运算符
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C *= A 等于 C = C * A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后再赋值 C <<= 2 等于 C = C << 2
>>= 右移后再赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
|= 按位或后赋值 C |= 2 等于 C = C | 2

指针运算符

运算符 含义 实例
& 返回变量存储地址 &a 将输出变量的实际地址
* 指针变量 *a 是一个指针变量

Go语言运算符汇总

运算符 运算符 运算符 运算符 运算符
+ & += &= &&
- | -= |= ||
* ^ *= ^= <-
/ « /= «= ++
% » || »=
== < > = !
!= <= >= :=
( [ { , .
) ] } ; :
&^ &^=

运算符优先级

  1. 一元运算符具有最高优先级。(++--运算符是形成语句而不是表达式,所以他们不属于运算符层次结构,语句*p++(*p)++相同)
  2. 二元运算符有五个层次结构,如下优先级数字越大表示优先级越高。
  3. 可以使用()来临时提高优先级。
优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

特殊运算符

位清除 &^

  1. 将指定位置上的值设置为0。将运算符左边数据相异的位保留,相同位清零。
  2. 如果Y某位上的数是0,则取X上对应位置的值。如果Y某位上为1,则结果位上取0。
    • 如果右侧是0,则左侧数保持不变。
    • 如果右侧是1,则左侧数一定清零。
    • 功能与a&(^b)相同。
X = 0b0000_0010             // 0000 0010
Y = 0b0000_0100             // 0000 0100
X &^ Y == X & (^Y)          // 0000 0010
1
2
3
4
5
6
7
8
// 相异的保留,相同位清零
// a &^ b
// 如果右侧(a)位是0,则左侧数保持不变
// 如果右侧(a)为是1,则左侧数一定清零
{
    // 清除a的第7位
    a &^ (1<<7) // 10000000  128
}

^ 异或(XOR

  1. 在Go语言中XOR是作为二元运算符存在。如果作为一元运算符出现,意思是按位取反。
  2. 作为二元运算符,XOR是不进位加法计算,也就是异或运算。

设置第n位为1

1
2
3
4
5
{
    var a uint8

    a = a | (1 << 7)    // 10000000
}

设置第n位为0

  1. &^:清零某位。
1
2
3
4
5
{
    var a uint8 = 0b0010_0001

    a = a &^ (1 << 5)   // 1
}