我和我的朋友正在搞砸,试图想出我们能想到的最糟糕的 for 循环(所以不要告诉我这是糟糕的代码,因为它应该是!)。
我的朋友想出了这个 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
(运行良好)放入 if 语句中,它会再次引发浮点异常:
for (int i = 0; i < 100; i++) {
if (i++ & ++i % (++i % 2) ? 0 : 1);
}
我完全迷失了这一点。有人知道这里发生了什么吗?