Go語言運算符
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語言 關系運算符
下表顯示了Go語言支持的所有關系運算符。假設變量
A
的值為10
,變量B
的值為20
,則:
運算符 | 描述 | 示例 |
---|---|---|
== | 檢查兩個操作數的值是否相等,如果相等,則條件為真。 | (A==B)結果為假 |
!= | 檢查兩個操作數的值是否相等,如果值不相等,則條件為真。 | (A!=B)結果為真 |
> | 檢查左操作數的值是否大於右操作數的值,如果是,則條件為真。 | (A>B)結果為假 |
< | 檢查左操作數的值是否小於右操作數的值,如果是,則條件為真。 | (A<B)結果為真 |
>= | 檢查左操作數的值是否大於或等於右操作數的值,如果是,則條件為真。 | (A>=B)結果為假 |
<= | 檢查左操作數的值是否小於或等於右操作數的值,如果是,則條件為真。 | (A<=B)結果為真 |
三、Go語言 邏輯運算符
下表顯示了Go語言支持的所有邏輯運算符。假設變量
A
的值為1
,變量B
的值為0
,則:
運算符 | 描述 | 示例 |
---|---|---|
&& | 邏輯AND 運算符。如果兩個操作數都不為零,則條件為真。 | (A&&B)結果為真 |
|| | 邏輯OR 運算符。如果兩個操作數中的任何一個非零,則條件變為真。 | (A||B)結果為真 |
! | 邏輯非運算符。用於反轉其操作數的邏輯狀態。如果條件為真,則邏輯非運算符將為假。 | !(A&&B)結果為真 |
四、Go語言 位運算符
按位操作符對位進行操作,並執行逐位操作。
&
,|
和^
的真值表如下:
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 |
假設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語言 賦值運算符
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 |
六、Go語言 其他運算符
還有一些其他重要的運算符包括
sizeof
和? :
,在Go語言中也是支持的。
運算符 | 描述 | 示例 |
---|---|---|
& | 返回變量的地址 | &a 將給出變量a 的實際地址。 |
* | 指向變量的指針 | *a 是指向變量a 的指針。 |
運算符優先級確定表達式中的分組。這會影響表達式的計算方式。某些運算符比其他運算符具有更高的優先級; 例如,乘法運算符比加法運算符有更高的優先級。
當同級別的運算符出現在同一個表達式中,從左到右的順序計算,比如乘除一起,不管是乘在前面還是除在前面都是從左到右計算乘、除運算符。加減亦是如此。
例如:x = 7 + 3 * 2
; 這裏,計算結果x
被分配13
,而不是20
,因為運算符 *
具有比+
有更的優先級,所以它首先乘以3 * 2
,然後加上7
。
這裏,具有最高優先級的運算符放在表的頂部,具有最低優先級的運算符出現在底部。 在表達式中,將首先計算較高優先級運算符。
分類 | 描述 | 關聯性 |
---|---|---|
後綴 | ()[]->.++ -- | 左到右 |
一元 | + -!~++ --(type)*&sizeof | 右到左 |
乘法 | */ % | 左到右 |
加法 | + - | 左到右 |
移位 | <<>> | 左到右 |
關系 | <<=>>= | 左到右 |
相等 | ==!= | 左到右 |
按位AND | & | 左到右 |
按位XOR | ^ | 左到右 |
按位OR | | | 左到右 |
邏輯AND | && | 左到右 |
邏輯OR | || | 左到右 |
條件 | ?: | 右到左 |
分配 | =+=-=*=/= %=>>= <<= &= ^= |= | 右到左 |
逗號 | , | 左到右 |