可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)神祕浮點異常
我的朋友和我都搞亂一輪苦思最差的,我們能想到的循環(所以不要告訴我這是可怕的代碼,因爲它應該是!)。
我的朋友想出了這個for循環:
for (int i = 0; i++ & ++i % (++i % 2) ? --i : i++; i++);
它看起來確定,但它失敗甚至是第一次進入由於浮點異常。 所以我的第一個念頭是模0.除以但它似乎不是沒有,因爲如果你這樣做,它運行良好:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2);
}
但這不會:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? --i : i++;
}
但它變得陌生。第一個案例運行良好第二個案例不會:
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? 0 : 1;
}
for (int i = 0; i < 100; i++) {
i++ & ++i % (++i % 2) ? 1 : 0; // 1 and 0 switched
}
所以現在我真的很困惑發生了什麼,但它又變得更加怪異。如果你把情況跟? 0 : 1
(其中細RAN)到if語句再次拋出浮點異常:
for (int i = 0; i < 100; i++) {
if (i++ & ++i % (++i % 2) ? 0 : 1);
}
我完全失去了這一點。任何人有任何想法這裏發生了什麼?
我什至不是什麼。 –
http://stackoverflow.com/questions/949433/could-anyone-explain-these-undefined-behaviors-i-i-i-i-i-etc – chris
如果您將&更改爲&&,會發生什麼? – Thalia