English 中文(简体)
Go - 操作符
  • 时间:2024-11-03

Go - 操作符



运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。Go语言有丰富的内置运算符,并提供以下类型的运算符-

算术运算符

关系运算符

逻辑运算符

位运算符

赋值运算符

混杂运算符

本教程逐一解释算术、关系、逻辑、逐位、赋值和其他运算符。

Arithmetic Operators

下表显示了Go语言支持的所有算术运算符。假设变量A保持10,变量B保持20,则−

Operator Description Example
+ Adds two operands A + B gives 30
- Subtracts second operand from the first A - B gives -10
* Multippes both operands A * B gives 200
/ Divides the numerator by the denominator. B / A gives 2
% Modulus operator; gives the remainder after an integer spanision. B % A gives 0
++ Increment operator. It increases the integer value by one. A++ gives 11
-- Decrement operator. It decreases the integer value by one. A-- gives 9

Relational Operators

The following table psts all the relational operators supported by Go language. Assume variable A holds 10 and variable B holds 20, then −

下表列出了Go语言支持的所有关系运算符。假设变量A保持10,变量B保持20,则−

Operator Description Example
== It checks if the values of two operands are equal or not; if yes, the condition becomes true. (A == B) is not true.
!= It checks if the values of two operands are equal or not; if the values are not equal, then the condition becomes true. (A != B) is true.
> It checks if the value of left operand is greater than the value of right operand; if yes, the condition becomes true. (A > B) is not true.
< It checks if the value of left operand is less than the value of the right operand; if yes, the condition becomes true. (A < B) is true.
>= It checks if the value of the left operand is greater than or equal to the value of the right operand; if yes, the condition becomes true. (A >= B) is not true.
<= It checks if the value of left operand is less than or equal to the value of right operand; if yes, the condition becomes true. (A <= B) is true.

Logical Operators

下表列出了Go语言支持的所有逻辑运算符。假设变量A保持1,变量B保持0,则−

Operator Description Example
&& Called Logical AND operator. If both the operands are non-zero, then condition becomes true. (A && B) is false.
|| Called Logical OR Operator. If any of the two operands is non-zero, then condition becomes true. (A || B) is true.
! Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false. !(A && B) is true.

The following table shows all the logical operators supported by Go language. Assume variable A holds true and variable B holds false, then −

Operator Description Example
&& Called Logical AND operator. If both the operands are false, then the condition becomes false. (A && B) is false.
|| Called Logical OR Operator. If any of the two operands is true, then the condition becomes true. (A || B) is true.
! Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true, then Logical NOT operator will make it false. !(A && B) is true.

Bitwise Operators

逐位运算符处理位并执行逐位运算。&、|和^的真值表如下-

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

Assume A = 60; and B = 13. In binary format, they will be as follows −

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

The Bitwise operators supported by C language are psted in the following table. Assume variable A holds 60 and variable B holds 13, then −

下表列出了C语言支持的位运算符。假设变量A保持60,变量B保持13,则−

Operator Description Example
& Binary AND Operator copies a bit to the result if it exists in both operands. (A & B) will give 12, which is 0000 1100
| Binary OR Operator copies a bit if it exists in either operand. (A | B) will give 61, which is 0011 1101
^ Binary XOR Operator copies the bit if it is set in one operand but not both. (A ^ B) will give 49, which is 0011 0001
<< Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand. A << 2 will give 240 which is 1111 0000
>> Binary Right Shift Operator. The left operands value is moved right by the number of bits specified by the right operand. A >> 2 will give 15 which is 0000 1111

Assignment Operators

The following table psts all the assignment operators supported by Go language −


Operator Description Example
= Simple assignment operator, Assigns values from right side operands to left side operand C = A + B will assign value of A + B into C
+= Add AND assignment operator, It adds right operand to the left operand and assign the result to left operand C += A is equivalent to C = C + A
-= Subtract AND assignment operator, It subtracts right operand from the left operand and assign the result to left operand C -= A is equivalent to C = C - A
*= Multiply AND assignment operator, It multippes right operand with the left operand and assign the result to left operand C *= A is equivalent to C = C * A
/= Divide AND assignment operator, It spanides left operand with the right operand and assign the result to left operand C /= A is equivalent to C = C / A
%= Modulus AND assignment operator, It takes modulus using two operands and assign the result to left operand C %= A is equivalent to C = C % A
<<= Left shift AND assignment operator C <<= 2 is same as C = C << 2
>>= Right shift AND assignment operator C >>= 2 is same as C = C >> 2
&= Bitwise AND assignment operator C &= 2 is same as C = C & 2
^= bitwise exclusive OR and assignment operator C ^= 2 is same as C = C ^ 2
|= bitwise inclusive OR and assignment operator C |= 2 is same as C = C | 2

Miscellaneous Operators

There are a few other important operators supported by Go Language including sizeof and ?:.


Operator Description Example
& Returns the address of a variable. &a; provides actual address of the variable.
* Pointer to a variable. *a; provides pointer to a variable.

Operators Precedence in Go

运算符优先级决定表达式中术语的分组。这会影响表达式的求值方式。某些运算符的优先级高于其他运算符;例如,乘法运算符具有比加法运算符更高的优先级。

例如,x=7+3*2;这里,x被赋值为13,而不是20,因为运算符*的优先级高于+,所以它首先与3*2相乘,然后加成7。

在这里,优先级最高的运算符出现在表的顶部,优先级最低的运算符显示在表的底部。在表达式中,将首先计算优先级较高的运算符。


Category Operator Associativity
Postfix () [] -> . ++ - - Left to right
Unary + - ! ~ ++ - - (type)* & sizeof Right to left
Multippcative * / % Left to right
Additive + - Left to right
Shift << >> Left to right
Relational < <= > >= Left to right
Equapty == != Left to right
Bitwise AND & Left to right
Bitwise XOR ^ Left to right
Bitwise OR | Left to right
Logical AND && Left to right
Logical OR || Left to right
Assignment = += -= *= /= %=>>= <<= &= ^= |= Right to left
Comma , Left to right