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 >.<

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ạ :joy:

1 Like

m = a++ là a tăng lên 1 giá trị sao m vẫn bằng 2 được ạ :sob:

Tự search Google đi em.
À, anh cho từ khoá gợi ý nhé: “a++ và ++a”

1 Like

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?

1 Like

Lộn lộn :joy:
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 :kissing_smiling_eyes:

Nó nằm bên nhánh TRUE :sweat:

1 Like

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ữ :slight_smile:

1 Like

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ụ:

  • Tiền tố: ++/–i
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

  • Hậu tố i++/–
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/

:heart_eyes:Mình Thông Não Rồi. Cảm Ơn Mọi Người :heart_eyes::heart_eyes:

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