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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 82
#1

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

31.07.2015, 02:55. Просмотров 294. Ответов 9
Метки нет (Все метки)

Здравствуйте! Имеется вопрос.
К примеру, когда пишут вот так :
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)   // это не из книги.
...
По-смыслу это все те же И и ИЛИ, или у них какой-то иной смысл?
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sutop
0 / 0 / 1
Регистрация: 30.07.2015
Сообщений: 8
31.07.2015, 03:22     Логические операции (Логические &&, ||) (Побитовые &, |) #2
Если грубо - то это "расширенные" и и или.
Если оператор "||" рассмотреть как функцию от двух аргументов (пусть x и y), то на выходе мы получим 0, если оба аргумента равны нулю и 1 в противном.
Если оператор "|" рассмотреть как подобную функцию, то мы можем получить любое целое число.

Оператор или "не из книги" ("|") даст такой же результат как оператор или "из книги"("||") потому-что его аргументы бинарные(тип bool).
MansMI
1133 / 930 / 239
Регистрация: 08.01.2012
Сообщений: 3,362
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
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 18:30     Логические операции (Логические &&, ||) (Побитовые &, |) #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от TheThe Посмотреть сообщение
а как тогда ofstream запоминает в каком режиме открывался файл ? Это хранится в какой-то переменной ?
Вычисляется побитовая сумма и передается как аргумент конструктору потока.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:59     Логические операции (Логические &&, ||) (Побитовые &, |)
Еще ссылки по теме:

C++ Чем оператор || отличается от оператора && ?
[struct tm] или нестыковка в C89 & C++98 & C++11? C++
Побитовые операции |, &, >> C++
Nested classes && enum declaration C++
Побитовые операции: как работает этот сдвиг вправо и логическое "И"(&) ? C++

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

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

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