Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Кто сейчас на форуме
Сейчас посетителей на форуме: 1, из них зарегистрированных: 0, скрытых: 0 и гостей: 1

Нет

[ Посмотреть весь список ]


Больше всего посетителей (7) здесь было Сб Июн 17, 2017 3:57 pm
Самые активные пользователи за неделю


Логические И и ИЛИ

Предыдущая тема Следующая тема Перейти вниз

Логические И и ИЛИ

Сообщение автор Ярослав в Вс Янв 08, 2017 12:44 am

Плохо Плохо:
Код:
if (number1 && number2 > 0)

Хорошо Хорошо:
Код:
if (number1 > 0 && number2 > 0)

Что не так с первым примером? Беда в том, что слева и справа от логического И должны стоять два логических утверждения:

утверждение А && утверждение B
означает: только если оба утверждения A и B истинны.

Если мы попробуем посмотреть, что стоит слева и справа от знака &&, увидим:
утверждение A: number1 (верно ли, что переменная number1... что?)
утверждение B: number2 > 0 (верно ли, что переменная number2 больше нуля)

Компилятор именно так разделит составное утверждение на две части, в том числе из-за таблицы приоритета операторов:
• 1-й операцией будет проверена истинность number2 > 0
• 2-й операцией будет попытка состыковать утверждение A и утверждение B логическим И.

Более того, у компилятора получится вычислить истинность утверждение А (не будет ошибки компилятора), но оно будет давать не вполне то, что хотелось.

Как именно программа вычислит истинность утверждения А?

number1 имеет тип int. Для логического И нужно, чтобы это выражение имело логический тип (bool). Типы int и bool в языке C совместимы: будет произведено неявное (то есть автоматическое) преобразование int -> bool. Это преобразование действует по правилу:

0 -> ложь
1 -> истина
всё остальное -> истина

По этому правилу оказывается, что можно писать так:
if (number1) // Неявно преобразовать number1 из int в bool

И это равносильно тому, что мы написали бы:
if (number1 != 0) // Ведь любые значения number1, кроме 0, считаются истиной

Возвращаясь к нашему примеру, это не совсем то, что имелось в виду: хотелось проверить number1 > 0.
avatar
Ярослав
Admin

Posts : 346
Join date : 2016-12-21
Location : Москва

Посмотреть профиль http://itstep.forum2x2.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения