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.
9 Antworten
+ 3
https://ru.cppreference.com/w/cpp/language/operator_precedence
приоритет и ассоциативность.
(4/3)*3=3 при целочисленном делении.
(3/4)*4=0 при таком же делении
соответственно 0+3+0=3
+ 2
При чем тут математика? Ассоциативность выполнения для арифметики в с++ слева направо.
Смотри ссылку https://ru.cppreference.com/w/cpp/language/operator_precedence
+ 2
Для целых операндов деление выполняется до получения целого результата. Поэтому 4/3=1, а 3/4=0
и читай внимательно то, что тебе пишут
+ 1
По правилам математики, все всегда решается слево на право. У операторов / и * приоритеты одинаковые, по этому они будут выполнятся в порядке последовательности. Как так вышло что будет (4/3) и (3/4)? Да и даже бы если было так, ответ все равно будет не 3 если по калькулятору считать в таком порядке.
+ 1
Илья, на мой вопрос уже ответили =) Прочтите комментарии, пожалуйста
0
Хорошо, спасибо за подсказку, но вопрос остается на том почему 3?Я посчитал что 4/3 = 1,333... а дальнейшее умножение на 3 будет выводить 4. И как вообще 4/3 и 3/4 будет одним и тем же?
0
Ааааа.... блин, спасибо тебе большое)) Как я и говорил, «я тормоз»)) . Я совсем int не учел. А (4/3)*3 = 1 и (3/4)*3=0это вы в пример привели, простите за не внимательность)
Спасибо большое)
0
d = b / a * a
Так как b = 4 и a = 3, то получается d = 4 : 3 * 3
4 : 3 будет 1, т.к. d это int, а не double, а int округляется.
Как ты считал, если у тебя 3*3 = 16?
- 1
Где там написано про одно и тоже? Одна строка с результатом 3, а другая с результатом 0