可能重复:
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