가능한 중복 :
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)신비한 부동 소수점 예외
내 친구와 나는 그렇게하지 않는다 (우리가 생각할 수있는 루프 최악을 마련하려고 라운드 쌓여 있었다 그것이 있어야하기 때문에 이것은 끔찍한 코드라고 말해줘!).
내 친구가 루프이 함께했다 :
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
}
을하지만, 다시 괴상 얻는다 : 첫 번째 경우는 두 번째 경우는하지 않습니다 잘 실행됩니다. 당신은 if 문에 (미세 실행 한) ? 0 : 1
의 경우를 넣을 경우 다시 부동 소수점 예외가 발생합니다 :
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-etc – chris
&를 &&로 변경하면 어떻게됩니까? – Thalia