Что-то не понятно происходит с простым кодом на c++ - Вопросы по С+

Вопрос Что-то не понятно происходит с простым кодом на c++

Регистрация
19 Июл 2013
Сообщения
76
Репутация
0
Спасибо
0
Монет
0
Я что-то не понимаю или почему C++ мне выводит, что k = 82899, T = 82899. Это каким образом первый if отработал в "положительную" сторону? #include



using namespace std;



void func()

{

int k = 0;

int T = 0;



metka:

if (k >= 25905 * T + 75)

{

if (k < 1351 * T + 0.71)

{

cout
 
Регистрация
15 Июл 2013
Сообщения
87
Репутация
0
Спасибо
0
Монет
0
while (++k < 25905 * k + 75);
1. если бы не было переполнения, цикл бы никогда не прекращался
так как k*25905 + 75 всегда меньше k. (так как k и Т изменяются одинаково в одном месте, и имеют одинаковый тип то T = k)
2. из-за переполнения когда к = 82899, произведение становится отрицательным числом, равным -2147468626. На этом цикл останавливается.
 
Регистрация
1 Июн 2013
Сообщения
94
Репутация
0
Спасибо
1
Монет
0
да всё просто, произошло переполнение переменной, она в минуса ушла
 
Регистрация
12 Сен 2013
Сообщения
107
Репутация
1
Спасибо
0
Монет
0
goto - ЗЛО, применять его нужно только в самом крайнем случаеПроход программы под отладчиком показывает, что и первый, и второй if отрабатывают ну просто очень не скоро.25905 × 82899 = 2147498595 Далее прибавляем к числу 75: 2147498670 Затем вычтем из этого числа трдцатидвухразрядное представление максимально большого числа 0x7FFFFFFF (2147483647): 2147498670−2147483647 = 15023
 
Сверху Снизу