# Toán tử trong Go

1. Toán tử số học

Với A := 10 và B := 20

 Operator Description Example # 1 + Phép cộng A + B = 30 2 - Phép trừ A - B = -10 3 * Phép nhân A * B = 200 4 / Phép chia B / A = 2 5 % Lấy phần dư B % A = 0 6 ++ Tăng giá trị thêm 1 A++ = 11 7 -- Giảm giá trị đi 1 A-- = 9

2. Toán tử so sánh

Với A := 10 và B := 20

 Operator Description Example # 1 == So sánh bằng nhau (A == B) is not true. 2 != So sánh khác nhau (A != B) is true. 3 > So sánh lớn hơn (A > B) is not true. 4 < So sánh nhỏ hơn (A < B) is true. 5 >= So sánh lớn hơn hoặc bằng (A >= B) is not true. 6 <= So sánh nhỏ hơn hoặc bằng (A <= B) is true.

3. Toán tử logical

Với A := true và B := false

 Operator Description Example # 1 && AND (A && B) is false. 2 || OR (A || B) is true. 3 ! NOT !(A && B) is true.

4. Toán tử bitwise

 p q p & q p | q p ^ q # 1 0 0 0 0 0 2 0 1 0 1 1 3 1 1 1 1 0 4 1 0 0 1 1

Ví dụ: Với A := 60 và B:= 13

``````A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A  = 1100 0011``````
 Operator Description Example # 1 & Binary AND Operator copies a bit to the result if it exists in both operands. (A & B) will give 12, which is 0000 1100 2 | Binary OR Operator copies a bit if it exists in either operand. (A | B) will give 61, which is 0011 1101 3 ^ 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 4 << 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 5 >> 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

5. Toán tử gán

 Operator Description Example # 1 = Simple assignment operator, Assigns values from right side operands to left side operand C = A + B will assign value of A + B into C 2 += 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 3 -= 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 4 *= Multiply AND assignment operator, It multiplies right operand with the left operand and assign the result to left operand C *= A is equivalent to C = C * A 5 /= Divide AND assignment operator, It divides left operand with the right operand and assign the result to left operand C /= A is equivalent to C = C / A 6 %= 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 7 <<= Left shift AND assignment operator C <<= 2 is same as C = C << 2 8 >>= Right shift AND assignment operator C >>= 2 is same as C = C >> 2 9 &= Bitwise AND assignment operator C &= 2 is same as C = C & 2 10 ^= bitwise exclusive OR and assignment operator C ^= 2 is same as C = C ^ 2 11 |= bitwise inclusive OR and assignment operator C |= 2 is same as C = C | 2

6. Toán tử khác

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

7. Các ưu tiên của toán tử trong Go

 Category Operator Associativity # 1 Postfix () [] -> . ++ - - Left to right 2 Unary + - ! ~ ++ - - (type)* & sizeof Right to left 3 Multiplicative * / % Left to right 4 Additive + - Left to right 5 Shift << >> Left to right 6 Relational < <= > >= Left to right 7 Equality == != Left to right 8 Bitwise AND & Left to right 9 Bitwise XOR ^ Left to right 10 Bitwise OR | Left to right 11 Logical AND && Left to right 12 Logical OR || Left to right 13 Conditional ?: Right to left 14 Assignment = += -= *= /= %=>>= <<= &= ^= |= Right to left 15 Comma , Left to right