Thắc mắc về i++ và ++i

int i=3;
if(i==i++){
	printf("true1");
}
if(i==++i){
	printf("true2");
}

i++ là tăng i sau mà tại sao lại in ra true2 vậy mọi người?

This post was flagged by the community and is temporarily hidden.

mình nên đọc kỹ lại phần nào vậy bạn?

This post was flagged by the community and is temporarily hidden.

1 Like

This post was flagged by the community and is temporarily hidden.

Mình nghĩ là vậy:
i==i++
+Theo thứ tự ưu tiên i++ sẽ thực hiện trước.

  • i++ tạo ra một bản sao bằng với i (tạm gọi là I=i=3)
    +Sau đó thì i tăng lên 1 đơn vị (i=4)
    +Vì là toán tử hậu tố nên i==i++ sẽ lấy bản sao ra thực hiện i==I mà lúc này i=4 còn I=3 => i==i++ sai
3 Likes

Chả hiểu mấy bạn trên nghĩ gì khi đi giải thích ra true2 là đúng? true1 sai
Nhìn đoạn code trên chắc chắn in ra true1 mới là đúng
In ra true2 => IDE đểu =))

3 Likes

Eclipse Java: True1

Theo mình nhé:
Về cái if 1 có i++ nó tương đương kiểu như là i+1 => i==i+1 => flase không in true1
Về cái if thứ 2 thì i==++i Đầu tiên nó tăng i từ 3 lên 4 sau đó nó so sánh i==i hay không (cái này luôn đúng rồi ) nên nó in ra true2.bạn tìm hiểu thêm về cái tiền tố trong C ý.

Nên dựa theo lý thuyết của ngôn ngữ, chứ theo ý kiến cá nhân bạn thì làm được gì? Bạn có phải là người tạo ra ngôn ngữ lập trình đâu.

The increment/decrement operators can be applied before (prefix) or after (postfix) the operand. The code i++; and ++i; will both end in i being incremented by one. The only difference is that the prefix version (++i) evaluates to the incremented value, whereas the postfix version (i++) evaluates to the original value. If you are just performing a simple increment/decrement, it doesn’t really matter which version you choose. But if you use this operator in part of a larger expression, the one that you choose may make a significant difference.

1 Like

Theo mình nghĩ thì toán tử ++ được ưu tiên trước toán tử == cho nên khi bạn dùng chung một biến để so sánh sẽ không có sự khác biệt.
Thay vào đó bạn có thể dùng một biến a khác để so sánh thay vì biến i

int i=3;
int a = 3;
if(a==i++){
	printf("true1");
}
if(a==++i){
	printf("true2");
}
1 Like

Ý kiến cá nhân :
Không biết và cũng không nên quan tâm vấn đề này. Chỉ nên dung I++.
Mà dù có hiểu được chính xác I++ với ++I trên từng IDE, Compiler cũng không giải quyết được cái vấn đề gì.

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