Các phép toán
Phép toán ý nghĩa Ví dụ - Đổi dấu một số thực hoặc nguyên -12, -a + Phép cộng 2 số thực hoặc nguyên 2+4=6 ...
Phép toán | ý nghĩa | Ví dụ |
- | Đổi dấu một số thực hoặc nguyên | -12, -a |
+ | Phép cộng 2 số thực hoặc nguyên | 2+4=6 |
- | Phép trừ | 2-3=-1 |
* | Phép nhân | 4*2=8 |
/ | Phép chia | 5/3=1 |
% | Phép lấy phần dư | 6/2=011.5%2.5=1.5 |
Chú ý:
- Nếu phép chia hai toán hạng đều nguyên thì phép chia cho kết quả là phần nguyên của thương hai toán hạng đó, ví dụ: 5/3=1
- Nếu phép chia hai toán hạng đều nguyên với số chia bằng 0 thì phép chia sinh lỗi, ví dụ 5/0 sẽ phát sinh lỗi
- Nếu một trong hai toán hạng là kiểu thực thì lúc này kết quả của phép chia cho ta giá trị đúng, ví dụ 5/2.0=2.5
- Nếu một trong hai toán hạng là kiểu thực với số chĩa bằnd 0 thì kết quả phép chia là infinity(dương vô cùng) hoặc –infinity(âm vô cùng)
- Phép toán % trả về phần dư của phép chia
Những toán tử quan hệ được dùng để so sánh giữa hai giá trị, và sau đó trả về kết quả là một giá trị logic kiểu bool (true hay false). Ví dụ toán tử so sánh lớn hơn (>) trả về giá trị là true nếu giá trị bên trái của toán tử lớn hơn giá trị bên phải của toán tử. Do vậy 5 > 2 trả về một giá trị là true, trong khi 2 > 5 trả về giá trị false.
Các toán tử quan hệ trong ngôn ngữ C# được trình bày ở bảng bên dưới.
Phép toán | ý nghĩa | Ví dụ | Kết quả |
> | So sánh lớn hơn | 1>2 | false |
>= | So sánh lớn hơn hoặc bằng | 2>=2 | true |
< | So sánh nhỏ hơn | 3<3 | false |
<= | So sánh nhỏ hơn hoặc bằng | 4<2 | false |
== | So sánh bằng nhau | 4==5 | false |
!= | So sánh không bằng nhau | 2!=7 | true |
Phép toán logic | ý nghĩa | Ví dụ | Kết quả |
! | Phép phủ định một ngôi (not) | !(3>1) | false |
&& | Liên kết hai biểu thức logic Phép và (and). Giá trị bằng 1 khi cả 2 toán hạng có giá trị 1 | (2>1)&&(5=2) | false |
|| | Liên kết hai biểu thức logic. Phép hoặc (or). Giá trị biểu thức bằng 1 khi một trong hai toán hạng bằng 1 | (4>3)||(1>8) | true |
Bảng giá trị của các phép toán logic
X | Y | X && Y | X || Y | ! X |
True | true | true | true | false |
True | false | false | true | false |
False | true | false | true | true |
False | false | false | false | true |
Trong ngôn ngữ lập trình C# đưa ra hai phép toán một ngôi để tăng và giảm các biến (nguyên và thực). Toán tử tăng ++ sẽ thêm 1 vào toán hạng của nó, toán tử giảm – sẽ trừ đi 1
Dấu phép toán ++ và -- có thể đứng trước hoặc đứng sau toán hạng. Như vậy ta có thể viết: ++n, n++, --n, n--
Sự khác nhau của ++n và n++ ở chỗ: Trong phép toán n++ thì n tăng sau khi giá trị của nó được sử dụng, còn trong ++n thì giá trị của n tăng trước khi giá trị của nó được sử dụng. Tương tự đối với –n và n--
Ví dụ: giả sử trước mỗi phép tính int i=3, j=15;
Phép toán | Tương đương | Kết quả |
i=++j; tăng trước | j=j+1; i=j; | i=16 và j=16 |
i=j++; tăng sau | i=j; j=j+1; | i=15 và j=16 |
i++; | i=i+1; | i=4 |
j = ++i + 5; | i=i+1; j=i+5; | i=4 và j=9 |
j = i++ +5; | j=i+5; i=i+1; | i=4 và j=8 |
Trình biên dịch phải xác định thứ tự thực hiện các toán tử trong trường hợp một biểu thức có nhiều phép toán, giả sử, có biểu thức sau:
var1 = 5+7*3;
Biểu thức trên có ba phép toán để thực hiện bao gồm (=, +,*). Ta thử xét các phép toán theo thứ tự từ trái sang phải, đầu tiên là gán giá trị 5 cho biến var1, sau đó cộng 7 vào 5 là 12 cuối cùng là nhân với 3, kết quả trả về là 36, điều này thật sự có vấn đề, không đúng với mục đích yêu cầu của chúng ta. Do vậy việc xây dựng một trình tự xử lý các toán tử là hết sức cần thiết.
Các luật về độ ưu tiên xử lý sẽ bảo trình biên dịch biết được toán tử nào được thực hiện trước trong biểu thức.Tương tự như trong phép toán đại số thì phép nhân có độ ưu tiên thực hiện trước phép toán cộng, do vậy 5+7*3 cho kết quả là 26 đúng hơn kết quả 36. Và cả hai phép toán cộng và phép toán nhân điều có độ ưu tiên cao hơn phép gán. Như vậy trình biên dịch sẽ thực hiện các phép toán rồi sau đó thực hiện phép gán ở bước cuối cùng. Kết quả đúng của câu lệnh trên là biến var1 sẽ nhận giá trị là 26.
Trong ngôn ngữ C#, dấu ngoặc được sử dụng để thay đổi thứ tự xử lý, điều này cũng giống trong tính toán đại số. Khi đó muốn kết quả 36 cho biến var1 có thể viết:
var1 = (5+7) * 3;
Biểu thức trong ngoặc sẽ được xử lý trước và sau khi có kết quả là 12 thì phép nhân được thực hiện.
Bảng sau liệt kê thứ tự độ ưu tiên các phép toán trong C#.
được liệt kê cùng loại sẽ có thứ tự theo mục thứ thự của bảng: thứ tự trái tức là độ ưu tiên của các phép toán từ bên trái sang, thứ tự phải thì các phép toán có độ ưu tiên từ bên phải qua trái. Các toán tử khác loại thì có độ ưu tiên từ trên xuống dưới, do vậy các toán tử loại cơ bản sẽ có độ ưu tiên cao nhất và phép toán gán sẽ có độ ưu tiên thấp nhất trong các toán tử.