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

Trần Hoàn viết 13:51 ngày 01/10/2018

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ạ

Khắc Tuấn viết 13:42 ngày 01/10/2018

int m = a++;//int m = a; a += 1; => m = 2

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

Trần Hoàn viết 13:51 ngày 01/10/2018

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

Uchiha Sasuke viết 13:52 ngày 01/10/2018

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

rogp10 viết 13:52 ngày 01/10/2018

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.

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ạ

“Trúng tên sợ cành cây cong” phỏng?

Trần Hoàn viết 13:57 ngày 01/10/2018

Lộn lộn
Nhìn thiếu dấu --, sorry, sorry các anh em

Khắc Tuấn viết 13:54 ngày 01/10/2018

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

rogp10 viết 13:48 ngày 01/10/2018

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

Khắc Tuấn viết 13:57 ngày 01/10/2018

e tưởng nó xuất -a thành -2

rogp10 viết 13:56 ngày 01/10/2018

e tưởng nó xuất -a thành -2

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

Khắc Tuấn viết 13:52 ngày 01/10/2018

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

rogp10 viết 13:56 ngày 01/10/2018

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ữ

Khắc Tuấn viết 13:41 ngày 01/10/2018

toán tử a++ nó chỉ thử hiện sau dấu ; phải ko ạ

Pham Van Hai viết 13:52 ngày 01/10/2018

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

Chào các bạn! Tiếp tục với khóa học lập trình C++ trực tuyến, trong bài học hôm nay, chúng ta tìm hiểu thêm 2 toán tử rất quan trọng thường xuyên được sử dụng trong ngôn ngữ lập trình C++. Toán tử tăng (increment operator) Toán tử tăng (kí hiệu: ++) có thể đứng trước hoặc sau một biến (variable). Ví dụ: int value = 5; ++value; value++; Cả hai vị trí đứng của toán tử tăng đều có chung một mục đích: Tăng giá trị của biến lên 1 đơn vị. Nhưng chúng hoàn toàn khác nhau về mặt ngữ nghĩa. …

HK boy viết 13:41 ngày 01/10/2018

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/

Khắc Tuấn viết 13:55 ngày 01/10/2018

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

Bài liên quan
0