2012-06-14 11 views

ответ

12

Ваш друг ошибается. Для ненулевого a в заявлении a && (b = 5/a) будет присвоено значение 5/a - b.

Если a == 0, то условное короткое замыкание и назначение не произойдет.

+1

Должен любить глупые ответы, как это ... знаю почему они получают так много upvotes, но это потрясающе :) –

+1

это очень верно, добрый сэр! –

4

Ваш друг ошибается. Обе стороны должны быть оценены, если a оценивает значение true, потому что && должен оценить обе стороны, чтобы выполнить правильное действие. || с другой стороны не будет. Вы могли бы легко проверить это самостоятельно, конечно, просто выполнив код и проверив значение b после условного.

+0

Условное короткое замыкание, если 'a == 0' ... ошибка не произойдет :). –

+0

@AlexLockwood: в вопросе предполагается, что значение 'a' оценивается как true, но я добавил это независимо от того, что, вероятно, лучше отметить его, чем игнорировать его. –

+0

@AlexLockwood: О, вы знаете, что; Я почему-то упустил тот факт, что 'a' - та же самая переменная, которая используется до' && '. Я (по какой-то причине) не понял этого и сосредоточился на 'а' в дивизии, но не в первой части. Благодарю. –

1

В 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 
} 

Успехов!

0

твой друг неверен. Учитывая, что и Ь Интс тогда, когда равен нулю Ь остается нетронутым, но когда равен нулю, то 5 делится на (ИНТ деление!) ...

«& &» оператор короткого замыкания оценка ...

Проверено это с помощью GCC ...

Смежные вопросы