Toán tử trong C#
Toán tử là một ký hiệu báo cho trình biên dịch thực hiện các thao tác toán học hoặc logic cụ thể. C# có tập hợp toán tử tích hợp phong phú và cung cấp loại toán tử sau:
- Toán tử số học.
- Toán tử quan hệ.
- Toán tử logic.
- Toán tử so sánh bit.
- Toán tử phép gán.
- Toán tử hỗn hợp.
Hướng dẫn này giải thích chi tiết về từng loại toán tử.
Toán tử số học
Bảng sau cho thấy tất cả các toán tử số học được hỗ trợ bởi C#. Giả sử biến A = 10 và biến B = 20 thì:
Toán tử | Miêu tả | Ví dụ |
---|---|---|
+ | Cộng hai toán hạng | A + B = 30 |
– | Trừ toán hạng thứ nhất với toán hạng thứ hai | A – B = -10 |
* | Nhân hai toán hạng | A * B = 200 |
/ | Chia lấy phần nguyên hai toán hạng | B / A = 2 |
% | Chia lấy phần dư | B % A = 0 |
++ | Cộng giá trị toán hạng với một | A++ = 11 |
— | Trừ giá trị toán hạng với một | A– = 9 |
Toán tử quan hệ
Bảng sau cho thấy tất cả các toán tử quan hệ được hỗ trợ bởi C#. Giả sử biến A = 10 và biến B = 20 thì:
Toán tử | Miêu tả | Ví dụ |
---|---|---|
== | Kiểm tra nếu 2 toán hạng bằng nhau hay không. Nếu bằng thì điều kiện là true. | (A == B) là false. |
!= | Kiểm tra 2 toán hạng có giá trị khác nhau hay không. Nếu không bằng thì điều kiện là true. | (A != B) là true. |
> | Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn toán hạng bên phải hay không. Nếu lớn hơn thì điều kiện là true. | (A > B) là false. |
< | Kiểm tra nếu toán hạng bên trái nhỏ hơn toán hạng bên phải hay không. Nếu nhỏ hơn thì là true. | (A < B) là true. |
>= | Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không. Nếu đúng là true. | (A >= B) là false. |
<= | Kiểm tra nếu toán hạng bên trái có giá trị nhỏ hơn hoặc bằng toán hạng bên phải hay không. Nếu đúng là true. | (A <= B) là true. |
Toán tử logic trong C#
Bảng dưới đây chỉ rõ tất cả các toán tử logic được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A = 1 và biến B = 0 thì:
Toán tử | Miêu tả | Ví dụ |
---|---|---|
&& | Được gọi là toán tử logic AND (và). Nếu cả hai toán tử đều có giá trị khác 0 thì điều kiện trở lên true. | (A && B) là false. |
|| | Được gọi là toán tử logic OR (hoặc). Nếu một trong hai toán tử khác 0, thì điều kiện là true. | (A || B) là true. |
! | Được gọi là toán tử NOT (phủ định). Sử dụng để đảo ngược lại trạng thái logic của toán hạng đó. Nếu điều kiện toán hạng là true thì phủ định nó sẽ là false. | !(A && B) là true. |
Toán tử so sánh bit trong C#
Toán tử so sánh bit làm việc trên đơn vị bit, tính toán biểu thức so sánh từng bit. Bảng dưới đây sẽ mô tả về các toán tử so sánh bit & (and), | (or), và ^ (xor) như sau:
a | b | a & b | a | b | a ^ b |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
Giả sử nếu A = 60; và B = 13; thì bây giờ trong định dạng nhị phân chúng sẽ là như sau:
A = 0011 1100
B = 0000 1101
—————–
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Ngôn ngữ C# hỗ trợ các toán tử so sánh bit được liệt kê trong bảng dưới đây. Giả sử ta có biến A = 60 và biến B = 13 thì:
Toán tử | Miêu tả | Ví dụ |
---|---|---|
& | Toán tử AND (và) nhị phân trả về những bit tồn tại trong cả hai toán hạng. | (A & B) sẽ cho kết quả là 12, tức là 0000 1100 |
| | Toán tử OR (hoặc) nhị phân rả về những bit tồn tại trong một hoặc hai toán hạng. | (A | B) sẽ cho kết quả là 61, tức là 0011 1101 |
^ | Toán tử XOR nhị phân trả về những bit mà nó chỉ tồn tại trong một toán hạng mà không phải cả hai. | (A ^ B) sẽ cho kết quả là 49, tức là 0011 0001 |
~ | Toán tử đảo bit (đảo bit 1 thành bit 0 và ngược lại). | (~A ) sẽ cho kết quả là -61, tức là 1100 0011. |
<< | Toán tử dịch trái. Giá trị toán hạng trái được dịch chuyển sang trái bởi số các bit được xác định bởi toán hạng bên phải (mỗi lần dịch trái 1 bit thì giá trị sẽ tăng gấp đôi 60 -> 120 -> 240). | A << 2 sẽ cho kết quả 240, tức là 1111 0000 (dịch sang trái hai bit) |
>> | Toán tử dịch phải. Giá trị toán hạng trái được dịch chuyển sang phải bởi số các bit được xác định bởi toán hạng bên phải (mỗi lần dịch phải 1 bit thì giá trị sẽ giảm một nửa 60 -> 30 -> 15). | A >> 2 sẽ cho kết quả là 15, tức là 0000 1111 (dịch sang phải hai bit) |
Toán tử phép gán trong C#
Bảng dưới đây là những toán tử gán được hỗ trợ bởi ngôn ngữ C#:
Toán tử | Miêu tả | Ví dụ |
---|---|---|
= | Toán tử gán đơn giản. Gán giá trị toán hạng bên phải cho toán hạng trái. | C = A + B sẽ gán giá trị của A + B vào trong C |
+= | Thêm giá trị toán hạng phải tới toán hạng trái và gán giá trị đó cho toán hạng trái. | C += A tương đương với C = C + A |
-= | Trừ đi giá trị toán hạng phải từ toán hạng trái và gán giá trị này cho toán hạng trái. | C -= A tương đương với C = C – A |
*= | Nhân giá trị toán hạng phải với toán hạng trái và gán giá trị này cho toán hạng trái. | C *= A tương đương với C = C * A |
/= | Chia toán hạng trái cho toán hạng phải và gán giá trị này cho toán hạng trái. | C /= A tương đương với C = C / A |
%= | Lấy phần dư của phép chia toán hạng trái cho toán hạng phải và gán cho toán hạng trái. | C %= A tương đương với C = C % A |
<<= | Dịch trái toán hạng trái sang số vị trí là giá trị toán hạng phải. | C <<= 2 tương đương với C = C << 2 |
>>= | Dịch phải toán hạng trái sang số vị trí là giá trị toán hạng phải. | C >>= 2 tương đương với C = C >> 2 |
&= | Phép AND bit | C &= 2 tương đương với C = C & 2 |
^= | Phép OR loại trừ bit | C ^= 2 tương đương với C = C ^ 2 |
|= | Phép OR bit. | C |= 2 tương đương với C = C | 2 |
Các toán tử hỗn hợp trong C#
Dưới đây là một số toán tử hỗn hợp quan trọng gồm sizeof, typeof , ? :, ??, is, as được hỗ trợ bởi ngôn ngữ C#.
Toán tử | Miêu tả | Ví dụ |
---|---|---|
sizeof() | Trả về kích cỡ của một kiểu giá trị | sizeof(int), trả về 4 |
typeof() | Trả về kiểu của một lớp | typeof(StreamReader); |
& | Trả về địa chỉ của một biến trên bộ nhớ Stack | &a; trả về địa chỉ thực sự của biến |
* | Trỏ tới một biến | *a; tạo con trỏ với tên là a tới một biến |
? : | Biểu thức tam phân, nếu điều kiện = true sẽ trả về X ngược lại sẽ trả về Y | Nếu Condition là true ? Thì giá trị X : Nếu không thì Y |
?? | Biểu thức kiểm tra biến X null, nếu null sẽ trả về Y, ngược lại sẽ trả về X | X ?? Y. Nếu X là null ?? Thì giá trị Y |
is | Xác định đối tượng là một kiểu cụ thể hay không | If( Ford is Car) // Kiểm tra nếu Ford là một đối tượng của lớp Car |
as | Ép kiểu mà không tạo một exception nếu việc ép kiểu thất bại |
Object obj = new StringReader("Hello"); StringReader r = obj as StringReader; |
Thứ tự ưu tiên toán tử trong C#
Thứ tự ưu tiên toán tử trong C# xác định cách biểu thức được tính toán. Thứ tự toán tử sẽ là nhân chia trước, cộng trừ sau (nhân -> chia -> cộng -> trừ).
Ví dụ, x = 6 + 3 * 2; ở đây, x được gán giá trị 12, chứ không phải 18 bởi vì toán tử * có quyền ưu tiên cao hơn toán tử +, vì thế đầu tiên nó thực hiện phép nhân 3 * 2 và sau đó thêm với 6.
Bảng dưới đây liệt kê thứ tự ưu tiên của các toán tử giảm dần từ trên xuống dưới. Trong một biểu thức, các toán tử có quyền ưu tiên cao nhất được tính toán đầu tiên.
Loại | Toán tử | Thứ tự ưu tiên |
---|---|---|
Postfix | () [] -> . ++ – – | Trái sang phải |
Unary | + – ! ~ ++ – – (type)* & sizeof | Phải sang trái |
Nhân chia | * / % | Trái sang phải |
Cộng trừ | + – | Trái sang phải |
Dịch chuyển | << >> | Trái sang phải |
Quan hệ | < <= > >= | Trái sang phải |
Cân bằng | == != | Trái sang phải |
Phép AND bit | & | Trái sang phải |
Phép XOR bit | ^ | Trái sang phải |
Phép OR bit | | | Trái sang phải |
Phép AND logic | && | Trái sang phải |
Phép OR logic | || | Trái sang phải |
Điều kiện | ?: | Phải sang trái |
Gán | = += -= *= /= %=>>= <<= &= ^= |= | Phải sang trái |
Dấu phảy | , | Trái sang phải |