1. ĐỊNH NGHĨA TOÁN TỬ
Toán tử là một công cụ để thực hiện các phép toán với dữ liệu. Mỗi toán tử sẽ có một ký hiệu dùng để đại diện cho một phép toán cụ thể để thực hiện với dữ liệu.
2. CÁC LOẠI TOÁN TỬ TRONG C#
Trong C# có 6 loại toán tử là:
- Toán tử số học
- Toán tử gán
- Toán tử logic
- Toán tử quan hệ
- Toán tử so sánh trên bit
- Toán tử khác
2.1: Toán tử số học
Hiểu đơn giản toán tử số học là các phép tính dùng trong môn Toán đại số như cộng, trừ, nhân, chia ...... Đây là các phép tính không thể thiếu trong mọi ngôn ngữ lập trình.
Giả sử ta có a = 5, b = 2 thì:
Giả sử ta có a = 5, b = 2 thì:
Toán tử | Mô tả | Ví dụ |
+ | Cộng 2 toán hạng | a + b sẽ bằng 7 |
- | Trừ 2 toán hạng | a - b sẽ bằng 3 |
* | Nhân 2 toán hạng | a * b sẽ bằng 10 |
/ | Thực hiện phép chia lấy phần nguyên nếu 2 toán hạng là số nguyên. Còn lại chia như bình thường. | a / b sẽ bằng 2 |
% | Chia lấy phần dư | a % b sẽ bằng 1 |
++ | Tăng lên 1 đơn vị | a++ sẽ bằng 6 |
-- | Giảm đi 1 đơn vị | a-- sẽ bằng 4 |
Ví dụ:
- Nếu mình khai báo biến là kiểu nguyên
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace quantrimaytinh
{
class quantrimaytinh
{
static void Main(string[] args)
{
decimal x = 2, y = 5;
Console.WriteLine("Tong cua hai so y+x = " + (x + y));
Console.WriteLine("Hieu cua hai so y-x = " + (y - x));
Console.WriteLine("Tich cua hai so y*x = " + y * x);
Console.WriteLine("Thuong cua hai so y/x = " + y / x);
Console.WriteLine("Phan du cua thuong y/x = " + y % x);
Console.ReadLine();
}
}
}
- Nếu mình khai báo biến là kiểu nguyên
int x = 2, y = 5;
thì kết quả phép chia sẽ là 2.Lưu ý: Cần phân biệt a++ với ++a, a-- với --a.
- a++ là sử dụng giá trị của biến a để thực hiện biểu thức trước rồi mới tăng a lên 1 đơn vị. (Tương tự với a--)
- ++a là tăng a lên 1 đơn vị trước rồi sử dụng a để thực hiện biểu thức. (Tương tự với --a)
- a++ là sử dụng giá trị của biến a để thực hiện biểu thức trước rồi mới tăng a lên 1 đơn vị. (Tương tự với a--)
- ++a là tăng a lên 1 đơn vị trước rồi sử dụng a để thực hiện biểu thức. (Tương tự với --a)
Ví dụ: cho x = 9
- Nếu y = x++ thì kết quả là y = 9, x = 10 (Phép gán được thực hiện trước rồi mới tăng giá trị của x)
- Nếu y = ++x thì cả y và x đều bằng 10 (Tăng giá trị của x trước rồi mới gán cho y)
- Nếu y = x++ thì kết quả là y = 9, x = 10 (Phép gán được thực hiện trước rồi mới tăng giá trị của x)
- Nếu y = ++x thì cả y và x đều bằng 10 (Tăng giá trị của x trước rồi mới gán cho y)
2.2: Toán tử gán
Toán tử | Mô tả | Ví dụ |
= | Gán giá trị của toán hạng bên phải cho toán hạng bên trái | a = 10 là gán 10 cho a |
+= | Lấy toán hạng bên trái cộng toán hạng bên phải rồi gán kết quả cho toán hạng bên trái | a += 1 tương đương với a = a + 1 |
-= | Lấy toán hạng bên trái trừ toán hạng bên phải rồi gán kết quả cho toán hạng bên trái | a -= 1 tương đương với a = a - 1 |
*= | Lấy toán hạng bên trái nhân với toán hạng bên phải rồi gán kết quả cho toán hạng bên trái | a *= 2 tương đương với a = a * 2 |
/= | Lấy toán hạng bên trái chia lấy phần nguyên cho toán hạng bên phải rồi gán kết quả cho toán hạng bên trái | a /= 2 tương đương với a = a / 2 |
%= | Lấy toán hạng bên trái chia lấy phần dư cho toán hạng bên phải rồi gán kết quả cho toán hạng bên trái | a %= 2 tương đương với a = a % 2 |
Lưu ý:
- Toán tử bên trái thường là một biến còn toán tử bên phải có thể là biến hoặc có thể là biểu thức
- Toán hạng bên phải có thể là một phép gán khác
Ví dụ 1:
Kết quả:
Ví dụ 2:
Lưu ý:
- Các toán tử quan hệ này chỉ áp dụng cho số hoặc ký tự.
- Hai toán hạng hai bên phải cùng loại (cùng là số hoặc cùng là ký tự).
- Bản chất của việc so sánh 2 ký tự với nhau là so sánh mã ASCII của các ký tự đó.
- Không nên sử dụng các toán tử quan hệ để so sánh các chuỗi với nhau vì bản chất việc so sánh chuỗi là so sánh từng ký tự tương ứng với nhau mà so sánh ký tự là so sánh mã ASCII của ký tự đó. Ví dụ mã ASCII của A và a là khác nhau. Để so sánh hai chuỗi người ta thường dùng hàm so sánh chuỗi đã được hỗ trợ sẵn.
Lưu ý: Trong một số trường hợp ta nên dùng ngoặc tròn () để nhóm các biểu thức nhằm quy định độ ưu tiên của các toán tử và làm cho biểu thức rõ ràng hơn.
Ví dụ thực hành:
Viết chương trình nhập vào độ C và lần lượt chuyển nó qua độ K và độ F biết rằng:
- K = C + 273
- F = C * 18/10 +32
Kết quả:
- Toán tử bên trái thường là một biến còn toán tử bên phải có thể là biến hoặc có thể là biểu thức
- Toán hạng bên phải có thể là một phép gán khác
Ví dụ 1:
int x = 5;
int y = 28;
Console.WriteLine("x = " + x);
Console.WriteLine("y = " + y);
y += x;
Console.WriteLine("y= y + x = " + y);
y -= x;
Console.WriteLine("y= y - x = " + y);
y *= x;
Console.WriteLine("y= y * x = " + y);
y /= x;
Console.WriteLine("y= y / x = " + y);
y %= x;
Console.WriteLine("y= y % x = " + y);
Console.ReadLine();
Kết quả:
Ví dụ 2:
int a, b, c;
a = b = c = 20;
Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
a += b = c = 5;
Console.WriteLine("a = {0}, b = {1}, c = {2}", a, b, c);
Console.ReadLine();
2.3: Toán tử logic
Toán tử | Mô tả |
|| | Còn gọi là OR, trả về kết quả là True nếu có 1 toán hạng là True. Trả về kết quả là False nếu tất cả đều là False |
&& | Còn gọi là AND, trả về kết quả là True nếu tất cả toán hạng đều là True. Trả về kết quả là False nếu có 1 toán hạng là False |
! | Còn gọi là NOT, có chức năng phủ định lại giá trị. Trả về kết quả là False nếu toán hạng mang giá trị True và ngược lại |
2.4: Toán tử quan hệ
Giả sử cho a = 6 và b = 9, ta có các ví dụ toán tử quan hệ sau:Toán tử | Mô tả | Ví dụ |
== | So sánh 2 toán hạng có bằng nhau hay không. Nếu bằng thì trả kết quả là True, ngược lại thì trả kết quả là False | a == b thì kết quả là False |
!= | So sánh 2 toán hạng có bằng nhau hay không. Nếu bằng thì trả kết quả là False, ngược lại thì trả kết quả là True | a != b thì kết quả là True |
> | So sánh toán hạng bên trái có lớn hơn toán hạng bên phải hay không. Lớn hơn thì kết quả là True, không lớn hơn thì là False | a > b thì kết quả là False |
< | So sánh toán hạng bên trái có nhỏ hơn toán hạng bên phải hay không. Nhỏ hơn thì kết quả là True, không nhỏ hơn thì là False | a < b thì kết quả là True |
>= | So sánh toán hạng bên trái có lớn hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả là True, nếu nhỏ hơn thì là False | a >= b thì kết quả là False |
<= | So sánh toán hạng bên trái có nhỏ hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả là True, nếu lớn hơn thì là False | a <= b thì kết quả là True |
- Các toán tử quan hệ này chỉ áp dụng cho số hoặc ký tự.
- Hai toán hạng hai bên phải cùng loại (cùng là số hoặc cùng là ký tự).
- Bản chất của việc so sánh 2 ký tự với nhau là so sánh mã ASCII của các ký tự đó.
- Không nên sử dụng các toán tử quan hệ để so sánh các chuỗi với nhau vì bản chất việc so sánh chuỗi là so sánh từng ký tự tương ứng với nhau mà so sánh ký tự là so sánh mã ASCII của ký tự đó. Ví dụ mã ASCII của A và a là khác nhau. Để so sánh hai chuỗi người ta thường dùng hàm so sánh chuỗi đã được hỗ trợ sẵn.
2.5: Toán tử so sánh trên bit
Giả sử ta có a = 10 và b = 9. Mã nhị phân của a sẽ là 1010, của b sẽ là 1001.Toán tử | Mô tả | Ví dụ |
& | Nếu giá trị 1 tồn tại trong cả 2 toán hạng tại vị trí tương ứng thì sao chép 1 tới kết quả, ngược lại thì kết quả là 0 | a & b sẽ ra kết quả là 8 tương đương với 1000 trong hệ nhị phân |
| | Nếu giá trị 1 tồn tại ở 1 trong 2 toán hạng tại vị trí tương ứng thì sao chép 1 tới kết quả, ngược lại thì là 0 | a | b sẽ ra kết quả là 11 tương đương với 1011 trong hệ nhị phân |
^ | Nếu giá trị 1 chỉ tồn tại ở 1 trong 2 toán hạng tại vị trí tương ứng thì sao chép 1 tới kết quả, ngược lại thì là 0 | a ^ b sẽ ra kết quả là 3 tương đương với 0011 trong hệ nhị phân |
~ | Đảo bit 0 thành 1 và 1 thành 0 | ~a sẽ ra 0101 |
<< | Toán hạng bên trái sẽ được dịch sang trái n bit với n được xác định bởi toán hạng bên phải | a << 3 sẽ ra kết quả là 80 tương đương với 1010000 trong hệ nhị phân |
>> | Toán hạng bên trái sẽ được dịch sang phải n bit với n được xác định bởi toán hạng bên phải | a >> 2 sẽ ra kết quả là 2 tương đương với 0010 trong hệ nhị phân |
2.6: Toán tử khác
Toán tử | Mô tả |
sizeof() | Trả về kích cỡ của một kiểu dữ liệu |
typeof() | Trả về kiểu của một lớp |
new | Cấp phát vùng nhớ mới, áp dụng cho kiểu dữ liệu tham chiếu |
is | Xác định đối tượng có phải là một kiểu cụ thể nào đó hay không. Nếu đúng thì kết quả là True ngược lại thì kết quả là False |
as | Ép kiểu mà không gây ra lỗi, nếu ép kiểu không thành công thì trả kết quả là null |
?: | Tương đương với cấu trúc điều kiện. Nếu toán hạng 1 là True thì trả kết quả là toán hạng 2, ngược lại là toán hạng 3 |
, | Dùng để nối nhiều biểu thức với nhau. Duyệt qua biểu thức 1 rồi đến biểu thức, trả về giá trị của biểu thức 2 |
3. THỨ TỰ ƯU TIÊN CÁC TOÁN TỬ
Mức độ | Toán tử | Thứ tự ưu tiên |
Cao nhất | () [] . | Trái sang phải |
⏬ | +; -; ++; --; !; ~; new; sizeof(); typeof() | Phải sang trái |
*; /; % | Trái sang phải | |
<<; >> | Trái sang phải | |
<; <=; >; >= | Trái sang phải | |
==; != | Trái sang phải | |
&; ^; | | Trái sang phải | |
&&; || | Trái sang phải | |
?: | ||
=; +=; -=; *=; /=; %= | Phải sang trái | |
Thấp nhất | , |
Ví dụ thực hành:
Viết chương trình nhập vào độ C và lần lượt chuyển nó qua độ K và độ F biết rằng:
- K = C + 273
- F = C * 18/10 +32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace quantrimaytinh
{
class quantrimaytinh
{
static void Main(string[] args)
{
Console.Write("Nhap do C: ");
int celsius = Convert.ToInt32(Console.ReadLine());
int K = celsius + 273;
int F = celsius * 18 / 10 + 32;
Console.WriteLine("{0} do C tuong ung voi {1} do K", celsius, K);
Console.WriteLine("{0} do C tuong ung voi {1} do F", celsius, F);
Console.ReadLine();
}
}
}
Kết quả:
Bài viết liên quan
Hàm đệ quy trong C#
enum trong C#
Struct trong C#
Lớp String trong C#
Vòng lặp foreach trong C#
Mảng đa chiều, mảng của mảng trong C#