C: Что вернет утверждение «A || 1 'вернуться, когда A> 1? - PullRequest
3 голосов
/ 10 августа 2010

Хотя я бы сам не написал, каков ожидаемый результат следующего утверждения, где A (с гарантированным нулем или положительным целым числом) больше 1?

return A || 1;

Во многих языках я ожидаю, что будет возвращено A, если только значение A не равно нулю, в этом случае 1 будет.

У меня нет моей книги на С, но я отмечаю, что в действительности значение 1 всегда возвращается. Это результат оптимизации компилятора или потенциальная неоднозначность выражения, или же возвращаемое значение недетерминировано?

Ответы [ 6 ]

18 голосов
/ 10 августа 2010

Стандарт гласит

Оператор || должен выдавать 1, если один из его операндов сравнивается с 0; в противном случае он возвращает 0. Результат имеет тип int.

См. Раздел 6.5.14 стандарта .

3 голосов
/ 10 августа 2010

Ожидаемый результат - ДА (или true)

|| оператор возвращает значение true, если хотя бы один из его операндов равен true (2-й операнд в вашем коде, очевидно, равен true)

2 голосов
/ 10 августа 2010

Это прямой C (без Objective-C). Он всегда вернет 1.

0 голосов
/ 11 августа 2010

Я считаю, что компилятор оптимизирует и даже не проверяет значение A. Может кто-нибудь подтвердить? У меня сложилось впечатление, что с A && 0, A || 1 и A || 0 (= A && 1) компилятор экономит время, распознавая, что выражение можно упростить до 0, 1 или A соответственно.

0 голосов
/ 10 августа 2010

для языков на основе C любое ненулевое значение равно true (представлено 1).И если ваш A равен нулю, он проверит другие сравнения, если это сравнение ИЛИ

Достаточно сказать, что в вашем примере, каким бы ни было значение A, всегда будет возвращаться 1, даже если вы используете ||2. если 2 не равно нулю, при выполнении с логическим оператором ИЛИ всегда будет возвращаться истина (представленная 1)

0 голосов
/ 10 августа 2010

В C результат ||, && или ! всегда равен 0 или 1, никогда не имеет другого ненулевого значения, независимо от значений операндов. Это означает, что ваш A || 1 всегда будет давать 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...