30/09/2018, 21:57

Độ ư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

Udemy

C++ Cơ bản dành cho người mới học lập trình | Udemy

Bắt đầu học lâp trình bằng ngôn ngữ C++

Einstein Albert viết 00:01 ngày 01/10/2018

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

Ngô Doãn Tuấn viết 00:11 ngày 01/10/2018

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

Einstein Albert viết 00:00 ngày 01/10/2018

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

Người bí ẩn viết 23:58 ngày 30/09/2018

Đã 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

Einstein Albert viết 00:11 ngày 01/10/2018

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ỉ ?

Nguyễn Tấn Khoa viết 00:10 ngày 01/10/2018

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

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

Người bí ẩn viết 00:02 ngày 01/10/2018

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

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

Ngô Doãn Tuấn viết 00:10 ngày 01/10/2018

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

Nguyễn Anh Khoa viết 00:01 ngày 01/10/2018

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ả

Ngô Doãn Tuấn viết 00:10 ngày 01/10/2018

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

Đình Nhì viết 00:09 ngày 01/10/2018

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?

Nguyễn Tấn Khoa viết 00:09 ngày 01/10/2018

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

Người bí ẩn viết 23:58 ngày 30/09/2018

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?

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)

Kitayama_Shizuku viết 00:05 ngày 01/10/2018

Đâ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!

Nguyễn Trần Phúc Bảo viết 00:12 ngày 01/10/2018

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.

HK boy viết 00:07 ngày 01/10/2018

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

Nguyễn Trần Phúc Bảo viết 00:07 ngày 01/10/2018

À ý 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 ạ

HK boy viết 00:09 ngày 01/10/2018

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

cout <> a;

cout <> b;

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/

Nguyễn Trần Phúc Bảo viết 00:08 ngày 01/10/2018

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

HK boy viết 00:07 ngày 01/10/2018

Mình không phải là thầy bạn ạ.

Bài liên quan
0