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.
(Theo OurViet Network)
Phần sau: Giao tiếp với Console