0

Объясните код пожалуйста =(

int a=3; int b=4; int c=a/b*b; int d=b/a*a; int e=a/b*b; int sum=c+e+d; cout<<sum; Я играл в SoloLearn и решил проверить код. Потом я решил посмотреть пошаговое выполнение кода. Не могу понять почему под переменной d, получается 3??? Я очень сильный тормоз. Уже 1000 раз смотрю на код и не догоняю, как это 4 / 16 = 3???? В выполнение кода, под переменной d почему то получается число 3.

16th Jan 2020, 12:24 AM
Georgiy
Georgiy - avatar
9 Antworten
+ 3
https://ru.cppreference.com/w/cpp/language/operator_precedence приоритет и ассоциативность. (4/3)*3=3 при целочисленном делении. (3/4)*4=0 при таком же делении соответственно 0+3+0=3
16th Jan 2020, 3:25 AM
Igor Kostrikin
Igor Kostrikin - avatar
+ 2
При чем тут математика? Ассоциативность выполнения для арифметики в с++ слева направо. Смотри ссылку https://ru.cppreference.com/w/cpp/language/operator_precedence
16th Jan 2020, 7:43 AM
Igor Kostrikin
Igor Kostrikin - avatar
+ 2
Для целых операндов деление выполняется до получения целого результата. Поэтому 4/3=1, а 3/4=0 и читай внимательно то, что тебе пишут
16th Jan 2020, 7:49 AM
Igor Kostrikin
Igor Kostrikin - avatar
+ 1
По правилам математики, все всегда решается слево на право. У операторов / и * приоритеты одинаковые, по этому они будут выполнятся в порядке последовательности. Как так вышло что будет (4/3) и (3/4)? Да и даже бы если было так, ответ все равно будет не 3 если по калькулятору считать в таком порядке.
16th Jan 2020, 7:39 AM
Georgiy
Georgiy - avatar
+ 1
Илья, на мой вопрос уже ответили =) Прочтите комментарии, пожалуйста
17th Jan 2020, 11:20 AM
Georgiy
Georgiy - avatar
0
Хорошо, спасибо за подсказку, но вопрос остается на том почему 3?Я посчитал что 4/3 = 1,333... а дальнейшее умножение на 3 будет выводить 4. И как вообще 4/3 и 3/4 будет одним и тем же?
16th Jan 2020, 7:47 AM
Georgiy
Georgiy - avatar
0
Ааааа.... блин, спасибо тебе большое)) Как я и говорил, «я тормоз»)) . Я совсем int не учел. А (4/3)*3 = 1 и (3/4)*3=0это вы в пример привели, простите за не внимательность) Спасибо большое)
16th Jan 2020, 7:52 AM
Georgiy
Georgiy - avatar
0
d = b / a * a Так как b = 4 и a = 3, то получается d = 4 : 3 * 3 4 : 3 будет 1, т.к. d это int, а не double, а int округляется. Как ты считал, если у тебя 3*3 = 16?
17th Jan 2020, 11:13 AM
Илья Кашуба
- 1
Где там написано про одно и тоже? Одна строка с результатом 3, а другая с результатом 0
16th Jan 2020, 7:54 AM
Igor Kostrikin
Igor Kostrikin - avatar