Выполнение операций между int и double


У меня есть домашнее задание на базовом языке Си, в котором меня просят вычислить определенные выражения, а затем проверить мои ответы в программе. Мне кажется, что я не могу получить ни один из этих ответов правильно по моим собственным расчетам...

Они хотят, чтобы я решал математические задачи, используя эти переменные:

int a = 2;
double b = 4.7;
int c = 3;
double d = 4.2;

Вот пример вопроса:

int answer1 = b+a/c-d; 

Я понимаю, что поскольку он имеет операнд int, то все переменные преобразуются в целое число, поэтому он должен выглядеть примерно так: I подумайте:

(4+2)/(3-4)

Я получил -6 в качестве ответа, когда делал это вручную, но когда я ввел его в виде кода, он дал мне ответ 0. Кто-нибудь может это объяснить? Я неправильно выполняю порядок операций? Я просто не понимаю, как компьютер получает 0 из этого. Это самый простой вопрос в моем домашнем задании, и я понятия не имею. Пожалуйста, помогите!

2 3

2 ответа:

Ваше выражение

b+a/c-d

То же самое, что

b + (a/c) - d
Поскольку и a, и c являются целыми числами, то частное a/c вычисляется с помощью целочисленного деления. Это дает 2/3 = 0. Итак, у вас есть:
b - d

Это вычисляется с плавающей точкой, так как b и d являются double. Результат равен 0.5, который при присвоении результату int усекается до 0.

Ваши порядки операций немного отклоняются:

int answer1 = b+(a/c)-d; 

int tmp1 = a/c; ---> 2/3 --> 0
int answer1 = 4.7 + 0 - 4.2 ----> 0.5 --> 0

Http://www.cplusplus.com/doc/tutorial/typecasting/