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