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

Логические операции (Логические &&, ||) (Побитовые &, |) - C++

Восстановить пароль Регистрация
 
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 82
31.07.2015, 02:55     Логические операции (Логические &&, ||) (Побитовые &, |) #1
Здравствуйте! Имеется вопрос.
К примеру, когда пишут вот так :
C++
1
2
3
4
5
...
if(i>5 && j>5)
...
if(i>5 || j>5)
...
Тут все понятно, в первом случае имеется ввиду, что, если i>5 И(&&) j>5 , то условие истинно.
Во втором случае тоже, если i>5 ИЛИ(||) j>5 , то условие будет истинным.
А что тогда означает вот это:
"Пример из книги"
C++
1
2
3
4
5
...
if(option->state & QStyle::State_Selected)
...
if(i>5 | j>5)   // это не из книги.
...
По-смыслу это все те же И и ИЛИ, или у них какой-то иной смысл?
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2015, 02:55     Логические операции (Логические &&, ||) (Побитовые &, |)
Посмотрите здесь:

Проблема с проверкой условия цикла for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++) C++
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
В программе объявлена переменная int x=1; определить значение выражения х>0 && x<1 ? 10/x : 10*x C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
Как проверить, принадлежит ли символ заданному диапазону m...n, кроме if (c <= n && c >= m) ? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sutop
0 / 0 / 1
Регистрация: 30.07.2015
Сообщений: 8
31.07.2015, 03:22     Логические операции (Логические &&, ||) (Побитовые &, |) #2
Если грубо - то это "расширенные" и и или.
Если оператор "||" рассмотреть как функцию от двух аргументов (пусть x и y), то на выходе мы получим 0, если оба аргумента равны нулю и 1 в противном.
Если оператор "|" рассмотреть как подобную функцию, то мы можем получить любое целое число.

Оператор или "не из книги" ("|") даст такой же результат как оператор или "из книги"("||") потому-что его аргументы бинарные(тип bool).
MansMI
1046 / 843 / 205
Регистрация: 08.01.2012
Сообщений: 3,020
31.07.2015, 03:24     Логические операции (Логические &&, ||) (Побитовые &, |) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
if(i>5 | j>5) в данном случае результат один и тот же, т.к. i>5 выдает 0 или 1
но if(2 && 5)-истина(в С все что не 0 - истина), а if(2 & 5)-ложь, т.к. побитово==0
kuza84
-4 / 23 / 4
Регистрация: 25.04.2013
Сообщений: 195
31.07.2015, 03:43     Логические операции (Логические &&, ||) (Побитовые &, |) #4
&& || ! это логические операторы
& | ^ - >> << это побитовые операторы для операций с отдельными битами операндов
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,647
31.07.2015, 06:48     Логические операции (Логические &&, ||) (Побитовые &, |) #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от TheThe Посмотреть сообщение
C++
1
if(option->state & QStyle::State_Selected)
Цитата Сообщение от TheThe Посмотреть сообщение
По-смыслу это все те же И и ИЛИ, или у них какой-то иной смысл?
Слева - число, биты которого используются как логические индикаторы, справа - битовая маска. Результат будет ненулевым, если из проверяемых маской битов (которые у нее единицы) хотя бы один ненулевой. В данном случае маска имеет всего один ненулевой бит, и проверяет, установлен он или нет.
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 82
31.07.2015, 14:26  [ТС]     Логические операции (Логические &&, ||) (Побитовые &, |) #6
Mr.X, кажется понял, слева имеем число, например 2789, в двоичной системе это - 1010 1110 0101, а справа, битовая маска имеет число 2048, в двоичной это - 1000 0000 0000.
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1010 1110 0101}{1000 0000 0000}= 1000 0000 0000, получается, что, проверяемый бит установлен и условие будет выполнено. Я правильно Вас понял ??

А что тогда означает | в этом случае :
C++
1
2
3
...
ofstream file ("text.txt",ios_base::out | ios_base::binary)
...
Спасибо за ответы!!!
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,647
31.07.2015, 14:40     Логические операции (Логические &&, ||) (Побитовые &, |) #7
Цитата Сообщение от TheThe Посмотреть сообщение
Я правильно Вас понял ??
Ну да.
Цитата Сообщение от TheThe Посмотреть сообщение
А что тогда означает | в этом случае
Устанавливаются биты по всем маскам-операндам.
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 82
31.07.2015, 14:51  [ТС]     Логические операции (Логические &&, ||) (Побитовые &, |) #8
Mr.X, Получается есть какое-то число, и мы прибавляем к нему эти маски ? к примеру изначально оно равно 0, а мы к нему прибавляем 2 других числа, например 8 (в двоичном коде - 1000 ) и 16 (в двоичном - 10000), так вот, 1000 - это к примеру бит открытия файла для вывода(ios_base::out),а 10000, к примеру бит открытия файла в бинарном режиме (ios_base::binary).
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1000}{10000}=11000 (24), а как тогда ofstream запоминает в каком режиме открывался файл ? Это хранится в какой-то переменной ?
Спасибо!!
Mr.X
Эксперт С++
 Аватар для Mr.X
2796 / 1572 / 246
Регистрация: 03.05.2010
Сообщений: 3,647
31.07.2015, 18:30     Логические операции (Логические &&, ||) (Побитовые &, |) #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от TheThe Посмотреть сообщение
а как тогда ofstream запоминает в каком режиме открывался файл ? Это хранится в какой-то переменной ?
Вычисляется побитовая сумма и передается как аргумент конструктору потока.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:59     Логические операции (Логические &&, ||) (Побитовые &, |)
Еще ссылки по теме:

Почему в выражении нельзя использовать запятую вместо && C++
Побитовые операции |, &, >> C++
Friend ostream& operator<<(ostream& stream, CArr& obj); C++

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

Или воспользуйтесь поиском по форуму:
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 82
31.07.2015, 23:59  [ТС]     Логические операции (Логические &&, ||) (Побитовые &, |) #10
Спасибо большое за объяснения!
Yandex
Объявления
31.07.2015, 23:59     Логические операции (Логические &&, ||) (Побитовые &, |)
Ответ Создать тему
Опции темы

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