Nội dung
Trong phần này, chúng ta sẽ tìm hiểu về các loại toán tử (operator) trong ngôn ngữ lập trình C# và cách sử dụng chúng.
Operator là các ký hiệu được sử dụng để thực hiện cách phép toán hạng (operand). Toán hạng có thể là biến và hằng (hoặc là biến hoặc hằng).
Ví dụ, trong 2+3, + là operator, + được sử dụng để thực hiện phép cộng. Trong khi 2 và 3 là toán hạng.
Các toán tử thường được dùng để thao tác với các Variable và value trong một chương trình. C# hỗ trợ một số toán tử (được phân loại dựa trên loại hoạt động mà chúng thực hiện).
- Assignment Operator (toán tử gán)
- Arithmetic Operator (toán tử số học)
- Relational Operator (toán tử quan hệ)
- Logical Operator (toán tử logic)
- Unary Operator (toán tử một ngôi)
- Ternary Operator (toán tử ba ngôi)
- Bitwise và Bit Shift Operator (toán tử thao tác và dịch chuyển bit)
- Compound Assignment Operators (toán tử gán kép)
1. Assignment Operator cơ bản (Toán tử gán cơ bản)
Toán tử gán cơ bản (=) được dùng để gán giá trị cho các biến. Ví dụ:
double x;
x = 50.05;
Ở đây, 50.05 được gán cho x.
Ví dụ 1: Assignment Operator cơ bản
using System;
namespace Operator
{
class AssignmentOperator
{
public static void Main(string[] args)
{
int firstNumber, secondNumber;
// Assigning a constant to variable
firstNumber = 10;
Console.WriteLine(“First Number = {0}”, firstNumber);
// Assigning a variable to another variable
secondNumber = firstNumber;
Console.WriteLine(“Second Number = {0}”, secondNumber);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
First Number = 10
Second Number = 10
Đây là một ví dụ đơn giản thể hiện việc sử dụng assignment operator.
Bạn có thể nhận thấy dấu ngoặc nhọn { } được sử dụng trong ví dụ. Chúng ta sẽ thảo luận về chúng trong phần string formatting. Hiện tại, bạn chỉ cần lưu ý rằng {0} được thay thế bằng variable đầu tiên theo sau chuỗi,{1} được thay thế bằng variable thứ hai và tương tự.
2. Arithmetic Operator (Toán tử số học)
Toán tử số họ được sử dụng để thực hiện các phép tính số học như cộng, trừ, nhân, chia,..
Ví dụ,
int x = 5;
int y = 10;
int z = x + y;// z = 15
Operator | Tên của Operator | Ví dụ |
+ | Toán tử phép cộng | 6 + 3 cho kết quả bằng 9 |
– | Toán tử phép trừ | 10 – 6 cho kết quả bằng 4 |
* | Toán tử phép nhân | 4 * 2 cho kết quả bằng 8 |
/ | Toán tử phép chia | 10 / 5 cho kết quả bằng 2 |
% | Toán tử phần trăm | 16 % 3 cho kết quả bằng 1 |
Ví dụ 2: Arithmetic Operator
using System;
namespace Operator
{
class ArithmeticOperator
{
public static void Main(string[] args)
{
double firstNumber = 14.40, secondNumber = 4.60, result;
int num1 = 26, num2 = 4, rem;
// Addition operator
result = firstNumber + secondNumber;
Console.WriteLine(“{0} + {1} = {2}”, firstNumber, secondNumber, result);
// Subtraction operator
result = firstNumber – secondNumber;
Console.WriteLine(“{0} – {1} = {2}”, firstNumber, secondNumber, result);
// Multiplication operator
result = firstNumber * secondNumber;
Console.WriteLine(“{0} * {1} = {2}”, firstNumber, secondNumber, result);
// Division operator
result = firstNumber / secondNumber;
Console.WriteLine(“{0} / {1} = {2}”, firstNumber, secondNumber, result);
// Modulo operator
rem = num1 % num2;
Console.WriteLine(“{0} % {1} = {2}”, num1, num2, rem);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
14.4 + 4.6 = 19
14.4 – 4.6 = 9.8
14.4 * 4.6 = 66.24
14.4 / 4.6 = 3.1304347826087
26 % 4 = 2
Ở trên là ví dụ về toán tử số học, các phép toán đã được tiến hành trong ví dụ trên. Các biến có thể được thay thế bằng hằng số trong các câu lệnh. Ví dụ,
result = 4.5 + 2.7 ; // result will hold 7.2
result = firstNumber – 3.2; // result will hold 11.2
3. Relational Operator (Toán tử quan hệ)
Toán tử quan hệ được sử dụng để kiểm tra mối quan hệ giữa hai toán hạng. Nếu mối quan hệ đúng thì kết quả trả về là true, ngược lại, kết quả sẽ là false.
Relational operator được sử dụng trong việc ra quyết định và vòng lặp (loop).
Operator | Tên của Operator | Ví dụ |
== | Equal to/ bằng với | 6 == 4 cho kết quả false |
> | Greater than/ lớn hơn | 3 > -1 cho kết quả true |
< | Less than/ nhỏ hơn | 5 < 3 cho kết quả false |
>= | Greater than or equal to/ lớn hơn hoặc bằng | 4 >= 4 cho kết quả true |
<= | Less than or equal to/ nhỏ hơn hoặc bằng | 5 <= 3 cho kết quả false |
!= | Not equal to/ không bằng | 10 != 2 cho kết quả true |
Ví dụ 3: Relational Operators
using System;
namespace Operator
{
class RelationalOperator
{
public static void Main(string[] args)
{
bool result;
int firstNumber = 10, secondNumber = 20;
result = (firstNumber==secondNumber);
Console.WriteLine(“{0} == {1} returns {2}”,firstNumber, secondNumber, result);
result = (firstNumber > secondNumber);
Console.WriteLine(“{0} > {1} returns {2}”,firstNumber, secondNumber, result);
result = (firstNumber < secondNumber);
Console.WriteLine(“{0} < {1} returns {2}”,firstNumber, secondNumber, result);
result = (firstNumber >= secondNumber);
Console.WriteLine(“{0} >= {1} returns {2}”,firstNumber, secondNumber, result);
result = (firstNumber <= secondNumber);
Console.WriteLine(“{0} <= {1} returns {2}”,firstNumber, secondNumber, result);
result = (firstNumber != secondNumber);
Console.WriteLine(“{0} != {1} returns {2}”,firstNumber, secondNumber, result);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
10 == 20 returns False
10 > 20 returns False
10 < 20 returns True
10 >= 20 returns False
10 <= 20 returns True
10 != 20 returns True
4. Logical Operator (Toán tử Logic)
Toán tử logic được sử dụng để thực hiện các hoạt động logic như and, or. Logical operator hoạt động trên biểu thức Bool (true và false) và trả về giá trị Bool. Chúng dùng trong việc ra quyết định và vòng lặp (loop).
Dưới đây là cách mà kết quả được đánh giá cho các toán tử logic AND và OR.
Toán hạng 1 | Toán hạng 2 | OR (||) | AND (&&) |
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
Nói một cách đơn giản, bảng trên có thể tóm tắt như sau:
- Nếu một trong các toán hạng true, toán tử logic OR sẽ đánh giá nó là true.
- Nếu một trong các toán hạng false, toán tử logic AND sẽ đánh giá nó là false
Ví dụ 4: Logical Operator
using System;
namespace Operator
{
class LogicalOperator
{
public static void Main(string[] args)
{
bool result;
int firstNumber = 10, secondNumber = 20;
// OR operator
result = (firstNumber == secondNumber) || (firstNumber > 5);
Console.WriteLine(result);
// AND operator
result = (firstNumber == secondNumber) && (firstNumber > 5);
Console.WriteLine(result);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
True
False
5. Unary Operator (Toán tử một ngôi)
Không giống như các toán tử khác, toán tử một ngôi hoạt động trên một toán hạng duy nhất.
Operator | Tên của Operator | Mô tả |
+ | Unary Plus/ Toán tử một ngôi cộng | Để lại dấu hiệu của toán hạng như nó vốn có |
– | Unary Minus/ Toán tử một ngôi trừ | Đảo ngược dấu hiệu của toán hạng |
++ | Increment/ Toán tử một ngôi tăng | Giá trị tăng thêm 1 |
— | Decrement/ Toán tử một ngôi giảm | Giá trị giảm đi 1 |
! | Logical Negation (Not)/Toán tử một ngôi phủ định logic | Đảo ngược giá trị của boolean |
Ví dụ 5: Unary Operator
using System;
namespace Operator
{
class UnaryOperator
{
public static void Main(string[] args)
{
int number = 10, result;
bool flag = true;
result = +number;
Console.WriteLine(“+number = “ + result);
result = -number;
Console.WriteLine(“-number = “ + result);
result = ++number;
Console.WriteLine(“++number = “ + result);
result = –number;
Console.WriteLine(“–number = “ + result);
Console.WriteLine(“!flag = “ + (!flag));
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
+number = 10
-number = -10
++number = 11
–number = 10
!flag = False
Các toán tử tăng (++)và toán tử giảm(–)có thể dùng như tiền tố và hậu tố.
- Sử dụng như tiền tố: Sự thay đổi giá trị của biến được nhìn thấy trên cùng một dòng.
- Sử dụng như hậu tố: Sự thay đổi giá trị của biến được nhìn thấy trên dòng tiếp theo.
Điều này sẽ rõ ràng hơn trong ví dụ dưới đây
Ví dụ 6: Trước và sau Increment operator trongC#
using System;
namespace Operator
{
class UnaryOperator
{
public static void Main(string[] args)
{
int number = 10;
Console.WriteLine((number++));
Console.WriteLine((number));
Console.WriteLine((++number));
Console.WriteLine((number));
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
10
11
12
12
Bạn có thể thấy hiệu quả của việc sử dụng ++ như tiền và hậu tố trong ví dụ trên. Khi ++ được sử dụng sau toán hạng, giá trị được đánh giá đầu tiên. Sau đó nó được tăng thêm 1.
Câu lệnh:
Console.WriteLine((number++));
In ra con số 10 thay vì 11 . Sau khi giá trị được in, giá trị của con số được tăng thêm 1.
Quá trình này bị đảo ngược khi ++ dùng như tiền tố (đặt phía sau number). Giá trị được tăng lên trước khi in. Vì thế câu lệnh:
Console.WriteLine((++number));
in ra con số 12.
Trường hợp tương tự xảy ra với toán tử giảm (–).
6. Ternary Operator (Toán tử ba ngôi)
Toán tử ba ngôi ? : hoạt động trên ba toán hạng. Nó là cách viết tắt của câu lệnh if-then-else. Ternary operator có thể được sử dụng như sau: variable = Condition? Expression1 : Expression2;
Toán tử ba ngôi hoạt động như sau:
- Nếu biểu thức được nêu bởi Điều kiện là true, kết quả của Expression1 được gán cho biến
- Nếu biểu thức false, kết quả của Expression2 sẽ được gán cho biến
Ví dụ 7: Ternary Operator
using System;
namespace Operator
{
class TernaryOperator
{
public static void Main(string[] args)
{
int number = 10;
string result;
result = (number % 2 == 0)? “Even Number” : “Odd Number”;
Console.WriteLine(“{0} is {1}”, number, result);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
10 is Even Number
Để biết thêm về toán tử ba ngôi, hãy truy cập C# ternary operator.
7. Bitwise và Bit Shift Operator (Toán tử thao tác và dịch chuyển bit)
Toán tử thao tác và dịch chuyển bit được sử dụng để thực hiện thao tác xử lý bit.
Operator | Tên của Operator |
~ | Bitwise Complement/ Bitwise bổ sung |
& | Bitwise AND |
| | Bitwise OR |
^ | Bitwise Exclusive OR/ Bitwise độc quyền OR (Bitwise XOR) |
<< | Bitwise Left Shift/ Bitwise chuyển sang trái theo chiều bit |
>> | Bitwise Right Shift/ Bitwise chuyển sang phải theo chiều bit |
Ví dụ 8: Bitwise và Bit Shift Operator
using System;
namespace Operator
{
class BitOperator
{
public static void Main(string[] args)
{
int firstNumber = 10;
int secondNumber = 20;
int result;
result = ~firstNumber;
Console.WriteLine(“~{0} = {1}”, firstNumber, result);
result = firstNumber & secondNumber;
Console.WriteLine(“{0} & {1} = {2}”, firstNumber,secondNumber, result);
result = firstNumber | secondNumber;
Console.WriteLine(“{0} | {1} = {2}”, firstNumber,secondNumber, result);
result = firstNumber ^ secondNumber;
Console.WriteLine(“{0} ^ {1} = {2}”, firstNumber,secondNumber, result);
result = firstNumber << 2;
Console.WriteLine(“{0} << 2 = {1}”, firstNumber, result);
result = firstNumber >> 2;
Console.WriteLine(“{0} >> 2 = {1}”, firstNumber, result);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
~10 = -11
10 & 20 = 0
10 | 20 = 30
10 ^ 20 = 30
10 << 2 = 40
10 >> 2 = 2
Để biết thêm về toán tử thao tác và dịch chuyển bit, hãy truy cập C# Bitwise Operators
8. Compound Assignment Operator (Toán tử gán ghép)
Operator | Tên của Operator | Ví dụ | Tương đương với |
+= | Addition Assignment/ cộng và gán | x += 5 | x = x + 5 |
-= | Subtraction Assignment/ trừ và gán | x -= 5 | x = x – 5 |
*= | Multiplication Assignment/ nhân và gán | x *= 5 | x = x * 5 |
/= | Division Assignment/ chia và gán | x /= 5 | x = x / 5 |
%= | Modulo Assignment/ phần trăm và gán | x %= 5 | x = x % 5 |
&= | Bitwise AND Assignment/ Bitwise AND và gán | x &= 5 | x = x & 5 |
|= | Bitwise OR Assignment/ Bitwise OR và gán | x |= 5 | x = x | 5 |
^= | Bitwise XOR Assignment/ Bitwise XOR and và gán | x ^= 5 | x = x ^ 5 |
<<= | Left Shift Assignment/ Chuyển sang trái và gán | x <<= 5 | x = x << 5 |
>>= | Right Shift Assignment/ chuyển sang phải và gán | x >>= 5 | x = x >> 5 |
=> | Lambda Operator/ Toán tử Lambda | x => x*x | Returns x*x |
Ví dụ 9: Compound Assignment Operator
using System;
namespace Operator
{
class BitOperator
{
public static void Main(string[] args)
{
int number = 10;
number += 5;
Console.WriteLine(number);
number -= 3;
Console.WriteLine(number);
number *= 2;
Console.WriteLine(number);
number /= 3;
Console.WriteLine(number);
number %= 3;
Console.WriteLine(number);
number &= 10;
Console.WriteLine(number);
number |= 14;
Console.WriteLine(number);
number ^= 12;
Console.WriteLine(number);
number <<= 2;
Console.WriteLine(number);
number >>= 3;
Console.WriteLine(number);
}
}
}
Khi chúng ta chạy chương trình, kết quả trả về màn hình sẽ là:
15
12
24
8
2
2
14
2
8
1
Chúng ta sẽ đi sâu vào phần Lambda operators trong những chương sau.