Độ ưu tiên của các toán tử C++!

Chào các bạn! Chúng ta tiếp tục gặp nhau trong khóa học lập trình trực tuyến ngôn ngữ C++. Trong bài học ngày hôm nay, chúng ta cùng tìm hiểu về độ ưu tiên của các toán tử đã được định nghĩa C++ (C++ operator precedence).

##Thế nào là độ ưu tiên của toán tử?

Để đánh giá đúng một biểu thức chứa nhiều toán tử, ví dụ 5 + 2 * 4 / 2, chúng ta phải biết mỗi toán tử trong biểu thức đó thực hiện công việc gì, và thứ tự mà chúng thực hiện. Thứ tự thực hiện các phép tính của một biểu thức kết hợp nhiều toán tử gọi là độ ưu tiên của toán tử (operator precedence).

Áp dụng độ ưu tiên của các toán tử toán học vào biểu thức 5 + 2 * 4 / 2, ta có thể đánh giá lại biểu thức này dưới dạng 5 + ((2 * 4) / 2) và kết quả là 9.

Khi có 2 toán tử có cùng độ ưu tiên được đặt cạnh nhau trong 1 biểu thức, chúng ta sử dụng nguyên tắc kết hợp (associativity rules) để biết được toán tử nào sẽ được thực hiện trước.

Ví dụ các toán tử toán học có được đánh giá từ trái qua phải, nên khi gặp biểu thức 3 * 2 * 6, chúng ta hiểu được rằng biểu thức sẽ được tính là (3 * 2) * 6.

Để biết được ngôn ngữ C++ định nghĩa độ ưu tiên các toán tử (operators precedence) như thế nào, chúng ta không có cách nào khác ngoài việc tra trong bảng độ ưu tiên toán tử bên dưới.

Trong bảng này, các toán tử được chia thành nhiều nhóm khác nhau, độ ưu tiên được sắp xếp giảm dần từ trên xuống dưới.

####C++ Operator Precedence and Associativity

  • Group 1 (no associativity):

  • Group 2 (left to right associativity):

  • Group 3 (right to left associativity):

  • Group 4 (left to right associativity):

  • Group 5 (left to right associativity):

  • Group 6 (left to right associativity):

  • Group 7 (left to right associativity):

  • Group 8 (left to right associativity):

  • Group 9 (left to right associativity):

  • Group 10 (left to right associativity):

  • Group 11 (left to right associativity):

  • Group 12 (left to right associativity):

  • Group 13 (left to right associativity):

  • Group 14 (left to right associativity):

  • Group 15 (right to left associativity):

  • Group 16 (right to left associativity):

  • Group 17 (right to left associativity):

  • Group 18 (left to right associativity):


Hẹn gặp lại các bạn trong bài học tiếp theo trong khóa học lập trình C++ cho người mới bắt đầu.

Mọi ý kiến đóng góp hoặc thắc mắc có thể đặt câu hỏi trực tiếp tại diễn đàn

www.daynhauhoc.com


Link Videos khóa học

13 Likes

Sao Tiếng Anh hết vại @@ anh chịu khó Vietsub nha anh :wink:

1 Like

:slight_smile: Hãy học tiếng anh đi thay vì kêu ca sao không có tiếng việt.

8 Likes

Em lạy anh anh ơi. Đâu phải ai cũng có năng khiếu anh văn đâu @@ Năm này mới bị liệt anh -> đắng

1 Like

Đã lập trình là phải Tiếng Anh. Yếu thì mới học chứ không học làm gì ?
Không phải không có năng khiếu anh văn mà chẳng qua là lười + tự ti bạn nhé. Con người chỉ 1% là thông minh, còn 99% là cần cù mà !
Cố gắng lên bạn :slight_smile:

2 Likes

Thanks bác đã thúc đẩy niềm tin. Chỗ em miền núi chả mấy dịp tếp xúc vs người nước ngoài. Chắc bác thành phố nhỉ ?

1 Like

Mình cũng đâu có được tiếp xúc với người nước ngoài đâu :frowning:

Nhưng nếu có mạng thì có thể call với người nước ngoài được mà :smile:

3 Likes

cc @Einstein_Albert : Bạn có thể tham khảo Topic này để học TA nhé: Kinh nghiệm luyện tiếng Anh online với giáo viên bản ngữ

Diễn đàn cũng có nhiều Topic và bài viết hướng dẫn cách học TA tốt nhất rồi, bạn search là ra ngay.
Mình cũng không tiện nói lắm vì sợ làm loãng Topic :slight_smile:

2 Likes

Thưa bác. Em cũng miền núi + 1 điểm ưu tiên.
Viêc học anh văn thì đừng đem lý do đó ra để ngụy biện :slight_smile:

3 Likes

Cho e hỏi với a @TheSky… trước e có đk tham gia khóa học C++ của a Đạt trên gg site, mà h ko thấy có rep thông báo về khóa học gì cả :expressionless:

2 Likes

Hi em, Khóa học hiện tại vẫn đang trong quá trình xây dựng video nhé :smiley:
Cảm ơn em vì đã quan tâm !

3 Likes

Có mấy cái rất rối quá, bây giờ có cần thiết phải biết hết tất cả không?

1 Like

Nếu như bạn định học chuyên sâu về C++ thì cần biết nhé :slight_smile:

2 Likes

Mấy cái độ ưu tiên hả bạn ?

Nếu bạn sắp đi thi cuộc thi gì liên quan đến Tin học hoặc là thích thú thì có thể nhớ hết !

Còn bình thường thì không nên nhớ làm gì, cứ chỗ nào thấy có vẻ “sai” thì cho thêm cặp dấu () vô thôi, vì () là ưu tiên nhất mà.

VD: 2 * 4 / 8
Mình muốn chia trước rồi nhân sau, nhưng lại không nhớ nhân được ưu tiên trước hay chia được ưu tiên trước thì để như sau: 2 * (4.0 / 8)

2 Likes

Đâu phải ở thành phố là được gặp người nước ngoài đâu bạn. Đâu phải nói chuyện với người nước ngoài là giỏi tiếng Anh được đâu! Nếu bạn muốn giỏi tiếng Anh, bạn cần nỗ lực, học hỏi trong một thời gian dài ( với mình thì đã là 10 năm), hiện mình đang ở low-C1 / C2, mình cũng ko có tố chất, mình nói rất nhanh và hay cà lâm nhưng cứ cố đi ai biết được, và mọi người ngưng đổ lỗi rằng học tiếng Anh tốt là do năng khiếu, và lập trình cũng ko ngoại lệ, là do nỗ lực mà thôi!

2 Likes

Thưa thầy em có một câu hỏi như sau:
Khi mình chạy chương trình giả sử như câu lệnh 1 là in ra màng hình 1, 2, 3
câu lệnh 2 là 4, 5, 6 . Vậy có cách nào đề xóa làm việc ở câu lệnh 1 không ạ
Cảm ơn đã lắng nghe mong được hồi đáp sớm nhất.

1 Like

Xoá làm việc là thế nào hả bạn?

1 Like

À ý mình là giả sử tại dòng 1:
cout << "Nhap so thu nhat: "; cin >> a;
dòng 2 là:
cout << " Nhap so thu hai: "; cin >> b;
khi hoat động thì ra
Nhap so thu nhat: —> mình nhap so 3 roi enter thì ra là:
"Nhap so thu nhat: 3
Nhap so thu hai: "
vậy mình có câu lệnh nào để xóa câu "Nhap so thu nhat: 3 " không ạ

1 Like

Viết lại cú pháp cho đúng đã.

cout << a;
cout << b;

Dùng lệnh xoá màn hình: system("cls") hoặc system("clear"). Tuy vậy, người ta cũng không khuyến khích sử dụng cách này.

Lý do:

http://www.cplusplus.com/articles/j3wTURfi/

Topic về clear screen:

http://www.cplusplus.com/articles/4z18T05o/

1 Like

Dạ em cảm ơn thầy ạ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?