算术运算符
Go
语言中,常见的可用于整数、浮点数和复数的二元运算符有:
+
-
*
/
:除,对于整数运算结果仍是整数,如5 / 2 -> 2
%
:取余,仅用于整数
用于整数和浮点数的一元运算符:
++
:自增--
:自减
注意:
int
、int8
等是不同的类型,不能互相直接运算。即使int
的大小是 32 bit,仍然和int32
属于不同类型。不同类型之间,不能直接运算,除非显式的类型转换;- 在运算时“溢出”不会产生错误,
Go
会简单地将超出位数抛弃。如果需要范围无限大的整数或者有理数,可以使用标准库中的big
包; 0
作为除数,会有错误;- 取余运算符
%
只能作用于整数; - 带有
++
和--
的只能作为语句,而非表达式,如n := i++
错误。其它一些可以用于C
、C++
和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
赋值运算符
运算后将值赋予前面的变量:
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=