私の友人と私は、考えられる最悪の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++;
}
しかし、それは見知らぬ人になります。最初のケースは正常に実行され、2番目のケースは正常に実行されません。
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);
}
私はこれで完全に迷子になっています。誰かがここで何が起こっているのか考えを持っていますか?