01/10/2018, 11:40
Thắc mắc về toán tử điều kiện
Em vừa vào nhập môn lập trình đến phần toán tử điều kiện thì có dòng code này:
int a=2, b=3;
int m = a++ > b-- ? -a : b++;
cout << m << endl;
đến đoạn này nếu như in ra m thi sẽ in ra m = -a = -2 chứ ạ nhưng sao lại ra 2.
Mong mn giúp em >.<
Bài liên quan
Viết code cho nó sáng sủa vào, ngắn được một dòng khổ người đọc.
Còn nếu là mình thì mình không bao giờ dùng toán tử
++
, đối với mình nó thật là thảm hoạm = a++ là a tăng lên 1 giá trị sao m vẫn bằng 2 được ạ
Tự search Google đi em.
À, anh cho từ khoá gợi ý nhé: “a++ và ++a”
dấu = phép gán gần như là thứ tự ưu tiên cuối cùng, đâu thể làm từ trái sang phải dc.
a ++ > b – false return b++
m = b++ => m : 2
Tính ra 2 > 3 (FALSE) và sequence point ngay dấu ?, ngay đó b bằng 2. b++ là nhánh FALSE nên m = 2 là chuẩn.
Thớt về xem lại op ++ trước và sau.
“Trúng tên sợ cành cây cong” phỏng?
Lộn lộn
Nhìn thiếu dấu
--
, sorry, sorry các anh emm = a luôn là cái dấu trừ trước a nó ko có tác dụng gì ạ.
em chậm tiêu quá nên kiếm phần này đọc mà vẫn chưa hiểu lắm
-a
đó chỉ là giá trị mà thôi, không thay đổi biến như++
với--
.e tưởng nó xuất -a thành -2
Nó nằm bên nhánh TRUE
Thì em biết nó là nhánh true mà ạ.
Em hiểu thế này ko biết sai chô nào
a++ > b-- ? -a : b++
3 > 2 ? -2 : 4
vì 3 > 2 nên nó xuất ra -2
a++
trả về ngay giá trị trước khi +1, tương tự vớib--
.p/s: “xuất ra” là thừa một chữ
toán tử a++ nó chỉ thử hiện sau dấu ; phải ko ạ
Toán tử tăng/giảm ++/-- có khái niệm tiền tố/hậu tố nếu nằm trong biểu thức thì nó hoạt động khác nhau, nếu đứng một mình thì giống nhau. Ví dụ:
Trong trường hợp của bạn khi thực hiện phép so sánh a vẫn là 2, b là 3 nên m = 2.
Sau phép so sánh a mới tăng lên và b mới giảm đi.
Bạn đọc kỹ bài này
Mình nghĩ là do độ ưu tiên toán tử trong C++ nên mới có kết quả như vậy.
Link: https://cpp.daynhauhoc.com/1/10-do-uu-tien-cua-cac-toan-tu/
Mình Thông Não Rồi. Cảm Ơn Mọi Người