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)結果爲真

Go語言運算符

邏輯OR運算符。如果兩個操作數中的任何一個非零,則條件變爲真。

(A Go語言運算符 B) 結果爲真

!

邏輯非運算符。用於反轉其操作數的邏輯狀態。如果條件爲真,則邏輯非運算符將爲假。

!(A && B) 結果爲真

按位運算符

按位操作符對位進行操作,並執行逐位操作。 |^的真值表如下:

p

q

p & q

Go語言運算符

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

Go語言運算符

二進制OR運算符複製一個位,如果它存在於任一操作數。

(A Go語言運算符 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

Go語言運算符 =

按位包含OR和賦值運算符

C Go語言運算符 = 2 相當於 C = C Go語言運算符 2

其它運算符

還有一些其他重要的運算符包括sizeof? :,在Go語言中也是支持的。

Go語言其它運算符示例

運算符

描述

示例

&

返回變量的地址

&a將給出變量a的實際地址。

*

指向變量的指針

*a 是指向變量a的指針。

Go語言中的運算符優先級

運算符優先級確定表達式中的分組。這會影響表達式的計算方式。某些運算符比其他運算符具有更高的優先級; 例如,乘法運算符比加法運算符有更高的優先級。

例如:x = 7 + 3 * 2; 這裏,計算結果x被分配13,而不是20,因爲運算符 *具有比+有更的優先級,所以它首先乘以3 * 2,然後加上7

這裏,具有最高優先級的運算符放在表的頂部,具有最低優先級的運算符出現在底部。 在表達式中,將首先計算較高優先級運算符。

運算符優先級示例

分類

描述

關聯性

後綴

() [] -> . ++ - -

左到右

一元

+ - ! ~ ++ - - (type)* & sizeof

右到左

乘法

* / %

左到右

加法

+ -

左到右

移位

<< >>

左到右

關係

< <= > >=

左到右

相等

== !=

左到右

按位AND

&

左到右

按位XOR

^

左到右

按位OR

Go語言運算符

左到右

邏輯AND

&&

左到右

邏輯OR

Go語言運算符 Go語言運算符

左到右

條件

?:

右到左

分配

= += -= *= /= %=>>= <<= &= ^= Go語言運算符 =

右到左

逗號

,

左到右