30/09/2018, 19:31

Toán tử ++ trong C++ và Java

Mình chạy đoạn code này trong DevC++ và NetBeans IDE

int main()
{
int n=2,t,k;
t = n++++n;
n=2; k = ++n
n++;
printf("%d %d",t,k); //8 12
return 0;
}

public static void main(String[] args) {
int n=2,t,k;
t = n++++n;
n=2; k = ++n
n++;
System.out.println("_"+t+" "+k); //_8 9
}

DevC++ ra kết quả 8 và 12
NetBeans ra kết quả 8 và 9
Mọi người giải thích sự khác nhau cho mình với

Bảo Ngọc viết 21:40 ngày 30/09/2018

Nếu không nhầm. n =1 thì t = ++n thì t = 2. T=n++ thì t =1.
Bạn có thể google lại là ra.

*grab popcorn* viết 21:42 ngày 30/09/2018

Code của C++ bị undefined behavior mất rồi.
Ko nên code như vậy vì nó vi phạm một rule của C/C++

The rules for sequencing says that you can only update a variable once between sequence points.

Còn java theo mình biết thì nó thực hiện câu lệnh từ trái sang phải (ko chắc lắm)
t = n++ * ++n;
Lấy n = 2 thế vào phép tính, sau đó tăng lên 1 (n=3)
Tiếp tới ++n, tăng n lên 1 sau đó lấy n (n=4)
2*4 = 8

k = ++n * n++;
Tăng n lên 1 sau đó bỏ giá trị n vào phép tính (n = 3)
Tiếp tới n++ thì nó lấy giá trị n hiejn tại (n=3) thế vào phép tính nên
k = 3 * 3
Sau đó thì tăng n lên 1

Còn để dễ hiểu toán tử ++ thì ntn

x = ++n
tương đương
n = n + 1
x = n
//
x = n++
tương đương
x = n
n = n + 1
Văn Dương viết 21:46 ngày 30/09/2018

Mình xin hỏi là tại sao lại phải phân biệt ra ++n với n++ ?
Tại sao không chỉ sử dụng mỗi n++ và quên cái ++n kia đi ?
++n có ứng dụng gì nổi trội hơn hẳn n++ hay ++n làm được những cái n++ không làm được ?

(Một con gà chưa bao giờ dùng ++n cho hay @@)

Tùng BK viết 21:32 ngày 30/09/2018

Nhớ không nhầm thì mấy tuần trước học, thầy kĩ thuật lập trình của mình nói là ++n cho performance hơn n++

Văn Dương viết 21:42 ngày 30/09/2018

Như nhau thôi
Compiler nào mà cho performance khác nhau là compiler lởm

thanh viết 21:41 ngày 30/09/2018

cái này cũng hack não dữ lắm, như vậy pn có hiểu được không

n=2;
cout<<n++;\\n=2
n=2
cout<<++n;\\n=3
Văn Dương viết 21:34 ngày 30/09/2018

Tốt nhất nên tránh mấy kiểu nhập nhằng khó hiểu.

Bài liên quan
0