Mức độ ưu tiên và tính liên kết của các toán tử trong C #: Định nghĩa và ví dụ

Trong hướng dẫn này, bạn sẽ tìm hiểu về tính ưu tiên của toán tử và tính liên kết trong C #. Điều này sẽ cung cấp cho chúng ta ý tưởng về cách một biểu thức được trình biên dịch C # đánh giá.

Ưu tiên toán tử C #

Mức độ ưu tiên của toán tử là một tập hợp các quy tắc xác định cách một biểu thức được đánh giá. Trong C #, mỗi toán tử C # có một mức độ ưu tiên được chỉ định và dựa trên các mức độ ưu tiên này, biểu thức được đánh giá.

Ví dụ: ưu tiên của toán (*)tử nhân cao hơn ưu tiên của (+)toán tử cộng. Do đó, hoạt động liên quan đến phép nhân được thực hiện trước khi cộng.

Hãy xem tuyên bố dưới đây.

 int x = 4 + 3 * 5;

Giá trị của x sẽ là bao nhiêu sau khi thực hiện câu lệnh này?

Toán hạng 3được liên kết với +*. Như đã nói trước đó, phép nhân có ưu tiên cao hơn phép cộng. Vì vậy, hoạt động 3 * 5được thực hiện thay vì 4 + 3. Giá trị của biến x sẽ là 19.

Nếu phép cộng sẽ có mức độ ưu tiên cao hơn, 4 + 3sẽ được đánh giá đầu tiên và giá trị của x sẽ là 35.

Bảng ưu tiên nhà điều hành

Toán tử có mức độ ưu tiên càng cao thì nó càng xuất hiện trong bảng

Ưu tiên toán tử C #
thể loại Người điều hành
Tăng và giảm Postfix ++, -
Tiền tố tăng dần, giảm dần và một bậc ++, -, +, -,!, ~
Phép nhân *, /,%
Phụ gia +, -
Shift <>
Quan hệ <,,> =
Bình đẳng ==,! =
Bitwise VÀ &
Bitwise XOR ^
Bitwise HOẶC |
Logic AND &&
Logic HOẶC ||
Đệ tam ? :
Chuyển nhượng =, + =, - =, * =, / =,% =, & =, | =, =, <> =

Các toán tử gán có mức ưu tiên thấp nhất trong khi toán tử tăng và giảm hậu tố có mức ưu tiên cao nhất.

Ví dụ 1: Mức độ ưu tiên của nhà khai thác

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int result1; int a = 5, b = 6, c = 4; result1 = --a * b - ++c; Console.WriteLine(result1); bool result2; result2 = b>= c + a; Console.WriteLine(result2); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 19 Sai

Hãy hiểu cách biểu thức được đánh giá trong chương trình.

Mức độ ưu tiên của --++cao hơn *, và mức độ ưu tiên của *cao hơn -. Do đó, tuyên bố,

 result1 = --a * b - ++ c;

tương đương với

 result1 = ((--a) * b) - (++ c);

Biểu thức bên trong dấu ngoặc luôn được đánh giá đầu tiên bất kể mức độ ưu tiên của các toán tử bên ngoài nó là bao nhiêu.

  • Lúc đầu, (--a) được đánh giá dẫn đến 4.
  • Sau đó (++ c) được đánh giá kết quả là 5.
  • Bây giờ, (a * b) được đánh giá kết quả là 24.
  • Cuối cùng, phép trừ được thực hiện dẫn đến 19.
  • Do đó giá trị cuối cùng của result1 sẽ là 19.

Trong biểu thức tiếp theo, mức độ ưu tiên của +cao hơn >=. Vì vậy, c và a được thêm vào trước và tổng được so sánh với b để tạo ra false.

Tính liên kết của các toán tử trong C #

Trong phần trước, chúng ta đã thảo luận về ưu tiên toán tử. Nếu hai toán tử có mức độ ưu tiên khác nhau được sử dụng, thì toán tử có mức độ ưu tiên cao hơn được đánh giá trước.

Nhưng điều gì sẽ xảy ra nếu cả hai toán tử có cùng quyền ưu tiên?

Trong trường hợp này, biểu thức được đánh giá dựa trên tính liên kết của toán tử (từ trái sang phải hoặc từ phải sang trái).

Ví dụ:

int a = 5, b = 6, c = 3; int result = a * b / c;

Ở đây, cả hai */có cùng mức độ ưu tiên. Nhưng vì tính kết hợp của các toán tử này là từ trái sang phải , a * bđược đánh giá trước tiên và sau đó phép chia được thực hiện. Kết quả cuối cùng của biểu thức này sẽ là 10.

Trong ví dụ cụ thể này, tính liên kết không thực sự quan trọng. Bởi vì ngay cả khi phép chia được thực hiện trước khi nhân, kết quả sẽ không bị ảnh hưởng.

Hãy xem một ví dụ khác.

int a = 5, b = 6, c = 3; a = b = c;

Tính liên kết của =toán tử là từ phải sang trái . Vì vậy, giá trị của c (tức là 3) được gán cho b, và sau đó giá trị của b được gán cho a. Vì vậy, sau khi thực hiện câu lệnh này, giá trị của a, b và c sẽ là 3.

Bảng dưới đây cho thấy sự kết hợp của các toán tử C #:

C # Tính liên kết của các toán tử
thể loại Người điều hành Sự liên kết
Tăng và giảm Postfix ++, - Trái sang phải
Tiền tố tăng dần, giảm dần và một bậc ++, -, +, -,!, ~ Phải sang trái
Phép nhân *, /,% Trái sang phải
Phụ gia +, - Trái sang phải
Shift <> Trái sang phải
Quan hệ <,,> = Trái sang phải
Bình đẳng ==,! = Trái sang phải
Bitwise VÀ & Trái sang phải
Bitwise XOR ^ Trái sang phải
Bitwise HOẶC | Trái sang phải
Logic AND && Trái sang phải
Logic HOẶC || Trái sang phải
Đệ tam ? : Phải sang trái
Chuyển nhượng =, + =, - =, * =, / =,% =, & =, | =, =, <> = Phải sang trái

Hầu hết tất cả các toán tử đều có liên kết từ trái sang phải. Các toán tử có liên kết từ phải sang trái là:

  • Toán tử đơn nguyên
  • Các toán tử tăng và giảm tiền tố
  • Nhà khai thác bậc ba
  • Người điều hành nhiệm vụ

Ví dụ 2: Tính liên kết của các toán tử

 using System; namespace Operator ( class OperatorPrecedence ( public static void Main(string() args) ( int a = 5, b = 6, c = 3; int result = a * b / c; Console.WriteLine(result); a = b = c; Console.WriteLine("a = (0), b = (1), c = (2)", a, b, c); ) ) ) 

Khi chúng tôi chạy chương trình, kết quả đầu ra sẽ là:

 10 a = 3, b = 3, c = 3

thú vị bài viết...