выражение в операторе if

 
0
 
C++
ava
Leopard255 | 22.03.2013, 11:01
почему в одном случае заходит внутрь вдругом нет?

 

  int yyy = ::GetTickCount();
    
   if ((::GetTickCount()-yyy-2*9000)>0)
   {
       int g =54;    // сюда заходит
   }

   int tmp = ::GetTickCount()-yyy-2*9000;
   if (tmp>0)
   {
       int g =54; // сюда не заходит
   }
Comments (3)
ava
Crafty | 22.03.2013, 10:54 #
Leopard255,  GetTickCount() возваращает DWORD, т.е. unsigned тип, а у тебя переменная tmp имеет тип int, вот и переполняется переменная.
ava
Leopard255 | 22.03.2013, 12:45 #
спасибо!
ava
math64 | 24.03.2013, 10:16 #
Нет. Конечно, переполнение может быть, но поскольку в первом варианте вычисление в unsigned, результат всегда больше или равен 0.
Вместо вычитания нужно делать сравнение.

DWORD t = GetTickCount() + dt;
if(GetTickCount() >= t) ...;
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit