a && (b = 5/a)
присвоить 5/a
до b
(для отличных от нуля a
)?Почему «a && (b = 5/a)« присваивает »5/a« to »b?
Мой друг говорит, что нет, но я смущен, почему это не так.
a && (b = 5/a)
присвоить 5/a
до b
(для отличных от нуля a
)?Почему «a && (b = 5/a)« присваивает »5/a« to »b?
Мой друг говорит, что нет, но я смущен, почему это не так.
Ваш друг ошибается. Для ненулевого a
в заявлении a && (b = 5/a)
будет присвоено значение 5/a
- b
.
Если a == 0
, то условное короткое замыкание и назначение не произойдет.
Ваш друг ошибается. Обе стороны должны быть оценены, если a
оценивает значение true, потому что &&
должен оценить обе стороны, чтобы выполнить правильное действие. ||
с другой стороны не будет. Вы могли бы легко проверить это самостоятельно, конечно, просто выполнив код и проверив значение b
после условного.
Условное короткое замыкание, если 'a == 0' ... ошибка не произойдет :). –
@AlexLockwood: в вопросе предполагается, что значение 'a' оценивается как true, но я добавил это независимо от того, что, вероятно, лучше отметить его, чем игнорировать его. –
@AlexLockwood: О, вы знаете, что; Я почему-то упустил тот факт, что 'a' - та же самая переменная, которая используется до' && '. Я (по какой-то причине) не понял этого и сосредоточился на 'а' в дивизии, но не в первой части. Благодарю. –
В C оценка рано отломится, если это имеет смысл с точки зрения логической редукции.
т.е.
if(a && (b=5/a))
Если равен нулю, то по логике вещей, все утверждение ноль/ложь, если игнорировать системные ошибки (то есть: деление на ноль), так что остальные заявления выиграли» t оценивается (например: «нуль и что-то равняется нулю», так зачем беспокоиться о вычислении части «и ничего», когда мы уже знаем, что окончательный ответ всегда будет равен нулю).
Лучшим решением было бы:
if(a) {
b=5/a;
} else {
b=0;
printf("ERROR! Attempt to divide by zero would have happened here!");
if(a && b) {
//Do stuff
}
Успехов!
твой друг неверен. Учитывая, что и Ь Интс тогда, когда равен нулю Ь остается нетронутым, но когда равен нулю, то 5 делится на (ИНТ деление!) ...
«& &» оператор короткого замыкания оценка ...
Проверено это с помощью GCC ...
Должен любить глупые ответы, как это ... знаю почему они получают так много upvotes, но это потрясающе :) –
это очень верно, добрый сэр! –