Re: Глюк или фича?
От: kankan Украина  
Дата: 13.06.07 07:30
Оценка:
Здравствуйте, 7C, Вы писали:

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


7C>
7C>int main()
7C>{
7C>    unsigned int z = 176400;
7C>    long a = -4;

        //b - это преобразованный к long результат деления беззнакового a*z на 1000
        // тоесть 0xfff53bc0 сначала делится на 1000, а потом кастится к знаковому
7C>    long b = a*z/1000; //b=4294261

        //здесь беззнаковое a*z (0xfff53bc0) сначала кастится к long(-705600), а потом аж делится на тыщу
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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.