Форум программистов, компьютерный форум CyberForum.ru

Поясните пару строчек - C++

Восстановить пароль Регистрация
 
Ivan575
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 19
12.06.2013, 17:35     Поясните пару строчек #1
Приветствую форумчане!
Поясните пожалуйста пару кусочков программы.
1 часть:
char a;
a=0;
if (!a)
{
...
};

В каком случае будет выполняться условие оператора if ?

2 часть:
int p1,p2,p3;
if (p1|p2|p3)
{
...
};

Что за условие в операторе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
12.06.2013, 17:40     Поясните пару строчек #2
Любое число, отличное от нуля это true. Ноль это false.

1. Условие !a выполниться тогда и только тогда, когда (char) a будет равен 0.
2. Это битовое или.
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
12.06.2013, 17:43     Поясните пару строчек #3
В первом случае, если а = 0. В данном случае, так и есть. Как бы логично: if обрабатывает логические выражения true (1) и false(0). !true = false = 0.
Во втором случае каждое число переводится в двоичную систему и производится побитовое или. К примеру.
p1 = 00110101
p2 = 10010111
p1|p2 = 10110111
Результат возвращается в начальную систему исчисления (в нашем случае система исчисления - 10).
Там, где была хотя бы одна единичка в том же разряде. В вашем случае сначала проверятся первые два, потом результат и третий. Но разницы нет, принцип будет, что если в разряде среди трех чисел есть хоть одна 1, то в результате в этом разряде будет 1.
Ivan575
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 19
12.06.2013, 17:45  [ТС]     Поясните пару строчек #4
Цитата Сообщение от stima Посмотреть сообщение
Любое число, отличное от нуля это true. Ноль это false.

1. Условие !a выполниться тогда и только тогда, когда (char) a будет равен 0.
2. Это битовое или.
т.е. во втором примере условие будет выполняться только в случае когда хотя бы один из операндов не ноль?
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
12.06.2013, 17:47     Поясните пару строчек #5
Ivan575, нет, это не логическое или, а битовое или. Выше написано принцип его работы: перевод числа в битовую запись (двоичную), и сравнение разрядов
Ivan575
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 19
12.06.2013, 17:49  [ТС]     Поясните пару строчек #6
аааа спс дошло Всем +1
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
12.06.2013, 17:49     Поясните пару строчек #7
Цитата Сообщение от Ivan575 Посмотреть сообщение
т.е. во втором примере условие будет выполняться только в случае когда хотя бы один из операндов не ноль?
Да. Если одно из чисел не ноль, то уже гарантированно выполнение.

2Nikoys Как раз таки да. Можете расписать через биты, если один из битов не ноль (о чем цитата выше), то условие выполнится. И это же условие, один из битов не ноль, говорит о том что одно из чисел не ноль.
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
12.06.2013, 17:54     Поясните пару строчек #8
stima, я имел в виду принцип работы будет не логическим или. Разумеется, что если одно из чисел не ноль, то битовая запись будет ненулевая и сразу будет выполнение условия.
А если у человека это будет записано выражением каким-то? Он будет оперировать уже не с 0 и 1, а с некоторым числовым выражением

Добавлено через 1 минуту
Грубо говоря:
C++
1
if(p1|p2|p3 - p1|p2)
не то же самое, что
C++
1
if(p1||p2||p3 - p1||p2)
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
12.06.2013, 17:56     Поясните пару строчек #9
Цитата Сообщение от Nikoys Посмотреть сообщение
А если у человека это будет записано выражением каким-то?
Дело в том, что человек спросил другое))) Я Вашу мысль понял, но просто есть вопрос и есть конкретный ответ.))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 17:57     Поясните пару строчек
Еще ссылки по теме:

C++ Матрица,сумма строчек
C++ Подсчет строчек в файле
C++ Поясните пожалуйста пару строк кода

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
12.06.2013, 17:57     Поясните пару строчек #10
stima, сойдемся на том, что ваш ответ был правильным, а я немножко заглянул вперед. Может, это и было излишним
Yandex
Объявления
12.06.2013, 17:57     Поясните пару строчек
Ответ Создать тему
Опции темы

Текущее время: 18:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru