(+84) 236.3827111 ex. 402

Các quy tắc thực hiện phép toán trong C#


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

2) Quy tắc kết hợp (Associativity rule)

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

3) Quy tắc nâng cấp toán hạng (Operand promotion rule)

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.

4) Quy tắc chuyển kiểu (Casting rule)

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);