Re[2]: Глюк или фича?
От: Нестеренко Сергей Украина  
Дата: 13.06.07 07:40
Оценка:
Здравствуйте, Seon, Вы писали:

S>Здравствуйте, 7C, Вы писали:


7C>>Наткнулся на неожиданное поведение вычислений в программе:


7C>>
7C>>int main()
7C>>{
7C>>    unsigned int z = 176400;
7C>>    long a = -4;
7C>>    long b = a*z/1000; //b=4294261
7C>>    long c = a*z; // c=-705600
7C>>    long d = c/1000; // d =-705
7C>>    return 0;
7C>>}
7C>>

7C>>В комментариях — текущий результат вычисления.
7C>>Компилятор Visual C++ 2005
7C>>Почему b не равно d
7C>>Кстати, если убрать unsigned (т.е. сделать z знаковым), то b =-705.

S>Переставь а и z местами.

Не выйдет. Нужно явно привести типы. long b = (int)(a*z)/1000;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.