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.