Go語言運算符
運算符是一個符號,通知編譯器執行特定的數學或邏輯操作。 Go語言有豐富的內置運算符,並提供以下類型的運算符:
- 算術運算符
- 關係運算符
- 邏輯運算符
- 按位運算符
- 賦值運算符
- 其它(雜項)運算符
本教程將逐個解釋和演示上面所說的算術,關係,邏輯,按位,賦值和其他運算符。
算術運算符
下表顯示了Go語言支持的所有算術運算符。假設變量 A
的值爲 10
,變量 B
的值爲 20
,則:
算術運算符示例
運算符
描述
示例
+
添加兩個操作數
A + B = 30
-
從第一個操作數中減去第二個操作數
A - B = 10
*
將兩個操作數相乘
A * B = 200
/
將分子除以分母
B / A = 2
%
模數運算符,以及整數除法的餘數
B % A = 0
++
增加(遞增)運算符,將整數值加一
A++ = 11
--
相減(遞減)運算符,將整數值減一
A— = 9
關係運算符
下表顯示了Go語言支持的所有關係運算符。假設變量 A
的值爲 10
,變量 B
的值爲 20
,則:
關係運算符示例
運算符
描述
示例
==
檢查兩個操作數的值是否相等,如果相等,則條件爲真。
(A == B)結果爲假
!=
檢查兩個操作數的值是否相等,如果值不相等,則條件爲真。
(A != B)結果爲真
>
檢查左操作數的值是否大於右操作數的值,如果是,則條件爲真。
(A > B)結果爲假
<
檢查左操作數的值是否小於右操作數的值,如果是,則條件爲真。
(A < B)結果爲真
>=
檢查左操作數的值是否大於或等於右操作數的值,如果是,則條件爲真。
(A >= B)結果爲假
<=
檢查左操作數的值是否小於或等於右操作數的值,如果是,則條件爲真。
(A <= B)結果爲真
邏輯運算符
下表顯示了Go語言支持的所有邏輯運算符。假設變量A
的值爲1
,變量B
的值爲0
,則:
邏輯運算符示例
運算符
描述
示例
&&
邏輯AND
運算符。如果兩個操作數都不爲零,則條件爲真。
(A && B)結果爲真
邏輯OR
運算符。如果兩個操作數中的任何一個非零,則條件變爲真。
(A B) 結果爲真
!
邏輯非運算符。用於反轉其操作數的邏輯狀態。如果條件爲真,則邏輯非運算符將爲假。
!(A && B) 結果爲真
按位運算符
按位操作符對位進行操作,並執行逐位操作。 &
,|
和^
的真值表如下:
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
假設A = 60
, B = 13
; 現在的二進制格式,如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Go語言支持的位運算符,如在下表中所列。 假設變量A=60
,並且變量B=13
,則:
按位運算符示例
運算符
描述
示例
&
如果兩個操作數中都存在二進制AND
運算符,則將其複製到結果。
(A & B
) 結果爲 12
, 也就是 0000 1100
二進制OR
運算符複製一個位,如果它存在於任一操作數。
(A
B) 結果爲 61, 也就是 0011 1101
^
二進制XOR
運算符複製位,如果它在一個操作數中設置,但不是在兩個操作數中設置。
(A ^ B) 結果爲 49
, 也就是 0011 0001
<<
二進制左移位運算符。左操作數值向左移動由右操作數指定的位數。
A << 2
結果爲 240
, 也就是 1111 0000
>>
二進制右移運算符。左操作數值向右移動由右操作數指定位數。
A >> 2
結果爲 15 , 也就是 0000 1111
賦值運算符
Go語言支持以下賦值運算符:
賦值運算符示例
運算符
描述
示例
=
簡單賦值操作符,將值從右側操作數分配給左側操作數
C = A + B
,就是將A + B
的值賦給C
+=
相加和賦值運算符,向左操作數添加右操作數,並將結果賦給左操作數
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
=
按位包含OR
和賦值運算符
C = 2 相當於 C = C 2
其它運算符
還有一些其他重要的運算符包括sizeof
和? :
,在Go語言中也是支持的。
Go語言其它運算符示例
運算符
描述
示例
&
返回變量的地址
&a
將給出變量a
的實際地址。
*
指向變量的指針
*a
是指向變量a
的指針。
Go語言中的運算符優先級
運算符優先級確定表達式中的分組。這會影響表達式的計算方式。某些運算符比其他運算符具有更高的優先級; 例如,乘法運算符比加法運算符有更高的優先級。
例如:x = 7 + 3 * 2
; 這裏,計算結果x
被分配13
,而不是20
,因爲運算符 *
具有比+
有更的優先級,所以它首先乘以3 * 2
,然後加上7
。
這裏,具有最高優先級的運算符放在表的頂部,具有最低優先級的運算符出現在底部。 在表達式中,將首先計算較高優先級運算符。
運算符優先級示例
分類
描述
關聯性
後綴
() [] -> . ++ - -
左到右
一元
+ - ! ~ ++ - - (type)* & sizeof
右到左
乘法
* / %
左到右
加法
+ -
左到右
移位
<< >>
左到右
關係
< <= > >=
左到右
相等
== !=
左到右
按位AND
&
左到右
按位XOR
^
左到右
按位OR
左到右
邏輯AND
&&
左到右
邏輯OR
左到右
條件
?:
右到左
分配
= += -= *= /= %=>>= <<= &= ^= =
右到左
逗號
,
左到右