Các quy tắc thực hiện phép toán trong C#
1) Quy tắc thứ tự ưu tiên (Precedence order rule)
Độ ưu tiên của các phép toán trong biểu thức thực hiện theo thứ tự từ trên xuống như trong bảng sau. Bạn có thể chủ động quy định thứ tự thực hiện phép toán trong biểu thức bằng những cặp ngoặc tròn ( ), trong ngoặc sẽ thực hiện trước, và ngoặc trong thực hiện trước, ngoặc ngoài thực hiện sau. Các phép toán trên cùng hàng sẽ có cùng độ ưu tiên.
Bảng quy tắc thứ tự ưu tiên trong C#
Toán tử |
Ghi chú |
( ), [], . |
Dấu . để truy xuất biến, phương thức của đối tượng, lớp, [] truy xuất phần tử của mảng |
++, --, +op, -op, !, ~ |
Dấu +op, -op là dấu dương, âm, ! làphép phủ định logic,~ là đảo bít |
new, (type) op |
(type) op là phép chuyển đổi kiểu |
*, /, % |
Các phép toán số học |
+, - |
|
<<, >>, >>> |
Phép toán dịch chuyển bit |
<, >, <=, >=, is |
Các phép toán quan hệ |
==, != |
|
& |
Các phép toán trên từng bit |
^ |
|
| |
|
&& |
Các phép toán logic |
|| |
|
? : |
Phép toán điều kiện |
=, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>=, >>>= |
Các phép toán gán |
Quy tắc kết hợp thực hiện trên các phép toán có cùng độ ưu tiên theo thứ tự từ trái qua phải hay từ phải qua trái như trong bảng trên.
Ví dụ: int x = a + b - c; //Thứ tự thực hiện phép toán + - từ trái qua phải
s += a += b += c; //Thứ tự thực hiện phép gán từ phải sang trái
Toán tử |
Quy tắc kết hợp |
( ), [], . |
Trái sang phải |
++, --, +op, -op, !, ~ |
Phải sang trái |
new, (type) op |
Phải sang trái |
*, /, % |
Trái sang phải |
+, - |
Trái sang phải |
<<, >>, >>> |
Trái sang phải |
<, >, <=, >=, is |
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 |
|| |
Trái sang phải |
? : |
Phải sang trái |
=, +=, -=, *=, /=, %=, ^=, &=, |=, <<=, >>=, >>>= |
Phải sang trái |
C# tự động nâng cấp kiểu cơ sở nào đó thành kiểu cơ sở khác lớn hơn, khi có nhu cầu. Chẳng hạn, nâng cấp kiểu char thành int, short hoặc int thành long, nâng cấp kiểu float thành double, hay kiểu nguyên thành kiểu thực. Các trường hợp chuyển đổi kiểu như vậy không làm mất mát thông tin.
Ví dụ: short x = 10;
int y = x;
char c = 'A'; //ký tự 'A' có mã unicode 65
Console.WriteLine(c+1); //in ra mã unicode 66
C# tự động nâng cấp kiểu char của biến c thành int
Trường hợp chuyển đổi các số thực (float, double, decimal) thành số nguyên (byte, sbyte, short, ushort, int, uint, long, ulong), và việc chuyển đổi các kiểu lớn thành các kiểu nhỏ hơn như long thành int, kết quả tính toán có thể thiếu chính xác, do đó C# không tự động thực hiện.
Ví dụ: byte a, b = 200, c = 100;
a = b + c;
Lỗi do kiểu byte của b, c nâng cấp thành int, vì vậy không thể gán giá trị kiểu int cho biến kiểu byte.
Nếu bạn muốn chuyển đổi giữa các kiểu dữ liệu, sử dụng cú pháp như sau: (KiểuMới) Expression
Ví dụ: byte a, b = 200, c = 100;
a = (byte) (b+c);
Không lỗi nhưng có thể mất mát thông tin, do kiểu byte: 0-255
char c = ‘A’;
Console.WriteLine((char)(c+32)) //in ra ký tự ‘a’
int a=5, b=2;
Console.WriteLine((double) a / b); //in ra 2.5
Có thể chuyển giữa 2 kiểu tham chiếu, chẳng hạn ta có một giao tiếp IHinhPhang, và lớp HinhChuNhat là lớp cài đặt giao tiếp IHinhPhang:
IHinhPhang HCN = new HinhChuNhat(2, 3);
Console.WriteLine(((HinhChuNhat)HCN).Canh2);
» Tin mới nhất:
» Các tin khác: