2016-02-08 7 views
1

Я шел через примеры в K & R, и наткнулся на этот бит кода:Почему усечение целых делений здесь не происходит?

celcius=5 * (fahr-32)/9; 

Автор говорит, что мы не можем использовать 5/9, так как целочисленное деление усечение приведет к значению 0.

Программа, однако, выводит 17 как ответ, когда fahr = 0. По моим расчетам, (0-32)/9 должно привести к -3 (из-за усечения), а затем -3 * 5 = -15 и NOT -17. Почему это происходит?

ответ

3

(0 - 32) сначала умножается на 5, давая -160. -160/9 = -17.

3

Что сказать автор, что не следует использовать

celsius = (fahr-32)*(5/9);


Что касается вашего вопроса,

celsius = 5 * (fahr-32)/9;

отличается от

celsius = 5 * ((fahr-32)/9);

В последнем случае вы действительно получите -15, если fahr=0.