Полагаю, i
- это 32-разрядная целочисленная переменная, поэтому она всегда меньше 10 миллиардов (что больше 2 ^ 32), тогда как 1 миллиард все еще вписывается в 32-разрядный диапазон (который заканчивается примерно на 2 или 4 миллиарда, в зависимости от подписи). Хотя я не знаю, как компилятор продвигает эту 10-миллиардную константу, но он, похоже, осознает проблему переполнения и делает ее бесконечным циклом.
Что происходит, когда вы делаете i
a long long int
(и, возможно, 10000000000
a 10000000000L
, но это не проблема)?