Thứ tự ưu tiên của các toán tử



Khi viết các biểu thức phức tạp với nhiều toán hạng các bạn có thể tự hỏi toán hạng nào được tính trước, toán hạng nào được tính sau. Ví dụ như trong biểu thức sau:

a = 5 + 7 % 2

có thể có hai cách hiểu sau:

a = 5 + (7 % 2) với kết quả là 6, hoặc
a = (5 + 7) % 2 với kết quả là 0

Câu trả lời đúng là biểu thức đầu tiên. Vì nguyên nhân nói trên, ngôn ngữ C++ đã thiết lập một thứ tự ưu tiên giữa các toán tử, không chỉ riêng các toán tử số học mà tất cả các toán tử có thể xuất hiện trong C++. Thứ tự ưu tiên của chúng được liệt kê trong bảng sau theo thứ tự từ cao xuống thấp. 

 

Thứ tự

Toán tử

Mô tả

Associativity

1

::

scope

Trái

2

() [ ] -> . sizeof

 

Trái

3

++ --

tăng/giảm

Phải

~

Đảo ngược bit

!

NOT

& *

Toán tử con trỏ

(type)

Chuyển đổi kiểu

+ -

Dương hoặc âm

4

* / %

Toán tử số học

Trái

5

+ -

Toán tử số học

Trái

6

<< >>

Dịch bit

Trái

7

< <= > >=

Toán tử quan hệ

Trái

8

== !=

Toán tử quan hệ

Trái

9

& ^ |

Toán tử thao tác bit

Trái

10

&& ||

Toán tử logic

Trái

11

?:

Toán tử điều kiện

Phải

12

= += -= *= /= %=
>>= <<= &= ^= |=

Toán tử gán

Phải

13

,

Dấu phẩy

Trái

Associativity định nghĩa trong trường hợp có một vài toán tử có cùng thứ tự ưu tiên thì cái nào sẽ được tính trước, toán tử ở phía xa nhất bên phải hay là xa nhất bên trái.

Nếu bạn muốn viết một biểu thức phức tạp mà lại không chắc lắm về thứ tự ưu tiên của các toán tử thì nên sử dụng các ngoặc đơn. Các bạn nên  thực hiện điều này vì nó sẽ giúp chương trình dễ đọc hơn.

Ntech Developers

Programs must be written for people to read, and only incidentally for machines to execute.

Post a Comment

Previous Post Next Post