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 >.<
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 >.<
Viết code cho nó sáng sủa vào, ngắn được một dòng khổ người đọc.
int a = 2, b = 3;
int m = a++;//int m = a; a += 1; => m = 2
if (m > b)
-a;
else
b++;
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 em
m = 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ới b--
.
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ụ:
int i = 1;
int a = ++i * 3; // đầu tiên i sẽ tăng lên 1 rồi nhân với 3 => i = 2, a= 6
int i = 1;
int a = i++ + 2; //đầu tiên phép cộng với 2 sẽ thực hiện trước rồi mới tăng i lên 1 => a = 3, i = 2
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