基本运算符#
算数运算符#
- 适用于数值类型,运算结果类型与除数类型一致。(除数是浮点数结果为浮点数,除数为整数结果为整数)
- 求余(
%
)运算结果符号与除数符号一致(除数是负数结果符号为负数)。
运算符 |
描述 |
适用范围 |
示例 |
+ |
加法运算符或字符串拼接符 |
适用于整数、浮点数、复数、字符串 |
5 + 3 = 8 |
- |
减法运算符 |
适用于整数、浮点数、复数 |
5 - 3 = 2 |
* |
乘法运算符 |
适用于整数、浮点数、复数 |
5 * 3 = 15 |
/ |
除法运算符 |
适用于整数、浮点数、复数 |
5 / 2 = 2 |
% |
求余运算 |
适用于整数(有符号、无符号) |
-5 % 2 = -1 ,-5 % -2 = -1 ,5 % 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 |
关系运算符#
- 双目运算符作比较,结果为布尔值。
运算符 |
含义 |
示例(A 小于 B) |
== |
等于 |
A == B false |
!= |
不等于 |
A != B true |
> |
大于 |
A > B false |
< |
小于 |
A < B true |
>= |
大于等于 |
A >= B false |
<= |
小于等于 |
A <= B true |
逻辑运算符#
- 双目运算符,处理左右布尔值。
运算符 |
描述 |
示例 |
&& |
逻辑与运算符(左右两边都为true 返回true ,否则返回false ) |
(true && false) == false |
|| |
逻辑或运算符(左右两边都为false 返回false ,否则返回true ) |
(false || false) == false |
! |
逻辑非运算符(一位运算符true 取反为false ,false 取反为true ) |
!true == false |
位运算符#
- 操作二进制数。
运算符 |
含义 |
& |
按为与,双目运算符。参与运算的两数各对应的位相与(同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语言运算符汇总#
运算符 |
运算符 |
运算符 |
运算符 |
运算符 |
+ |
& |
+= |
&= |
&& |
- |
| |
-= |
|= |
|| |
* |
^ |
*= |
^= |
<- |
/ |
« |
/= |
«= |
++ |
% |
» |
|| |
»= |
– |
== |
< |
> |
= |
! |
!= |
<= |
>= |
:= |
… |
( |
[ |
{ |
, |
. |
) |
] |
} |
; |
: |
&^ |
&^= |
|
|
|
运算符优先级#
- 一元运算符具有最高优先级。(
++
和--
运算符是形成语句而不是表达式,所以他们不属于运算符层次结构,语句*p++
与(*p)++
相同)
- 二元运算符有五个层次结构,如下优先级数字越大表示优先级越高。
- 可以使用
()
来临时提高优先级。
优先级 |
运算符 |
5 |
* / % << >> & &^ |
4 |
+ - | ^ |
3 |
== != < <= > >= |
2 |
&& |
1 |
|| |
特殊运算符#
位清除 &^
#
- 将指定位置上的值设置为0。将运算符左边数据相异的位保留,相同位清零。
- 如果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
)#
- 在Go语言中XOR是作为二元运算符存在。如果作为一元运算符出现,意思是按位取反。
- 作为二元运算符,XOR是不进位加法计算,也就是异或运算。
设置第n
位为1#
1
2
3
4
5
|
{
var a uint8
a = a | (1 << 7) // 10000000
}
|
设置第n
位为0#
&^
:清零某位。
1
2
3
4
5
|
{
var a uint8 = 0b0010_0001
a = a &^ (1 << 5) // 1
}
|