Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
#1

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

31.07.2015, 02:55. Просмотров 390. Ответов 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)   // это не из книги.
...
По-смыслу это все те же И и ИЛИ, или у них какой-то иной смысл?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2015, 02:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Логические операции (Логические &&, ||) (Побитовые &, |) (C++):

Где используются логические операторы && и ||
Скажите пожалуйста а логические операторы такие как и &&, или ||,не !,можно...

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef...

Побитовые операции |, &, >>
Есть функция, которая формирует пакет для отправки в com-порт (в примере sg -...

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp;...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size;...

9
sutop
0 / 0 / 1
Регистрация: 30.07.2015
Сообщений: 8
31.07.2015, 03:22 #2
Если грубо - то это "расширенные" и и или.
Если оператор "||" рассмотреть как функцию от двух аргументов (пусть x и y), то на выходе мы получим 0, если оба аргумента равны нулю и 1 в противном.
Если оператор "|" рассмотреть как подобную функцию, то мы можем получить любое целое число.

Оператор или "не из книги" ("|") даст такой же результат как оператор или "из книги"("||") потому-что его аргументы бинарные(тип bool).
0
MansMI
1447 / 1156 / 549
Регистрация: 08.01.2012
Сообщений: 4,509
31.07.2015, 03:24 #3
Лучший ответ Сообщение было отмечено TheThe как решение

Решение

if(i>5 | j>5) в данном случае результат один и тот же, т.к. i>5 выдает 0 или 1
но if(2 && 5)-истина(в С все что не 0 - истина), а if(2 & 5)-ложь, т.к. побитово==0
1
kuza84
-4 / 23 / 7
Регистрация: 25.04.2013
Сообщений: 195
31.07.2015, 03:43 #4
&& || ! это логические операторы
& | ^ - >> << это побитовые операторы для операций с отдельными битами операндов
1
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 06:48 #5
Лучший ответ Сообщение было отмечено TheThe как решение

Решение

Цитата Сообщение от TheThe Посмотреть сообщение
C++
1
if(option->state & QStyle::State_Selected)
Цитата Сообщение от TheThe Посмотреть сообщение
По-смыслу это все те же И и ИЛИ, или у них какой-то иной смысл?
Слева - число, биты которого используются как логические индикаторы, справа - битовая маска. Результат будет ненулевым, если из проверяемых маской битов (которые у нее единицы) хотя бы один ненулевой. В данном случае маска имеет всего один ненулевой бит, и проверяет, установлен он или нет.
1
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
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)
...
Спасибо за ответы!!!
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 14:40 #7
Цитата Сообщение от TheThe Посмотреть сообщение
Я правильно Вас понял ??
Ну да.
Цитата Сообщение от TheThe Посмотреть сообщение
А что тогда означает | в этом случае
Устанавливаются биты по всем маскам-операндам.
1
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
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 запоминает в каком режиме открывался файл ? Это хранится в какой-то переменной ?
Спасибо!!
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
31.07.2015, 18:30 #9
Лучший ответ Сообщение было отмечено TheThe как решение

Решение

Цитата Сообщение от TheThe Посмотреть сообщение
а как тогда ofstream запоминает в каком режиме открывался файл ? Это хранится в какой-то переменной ?
Вычисляется побитовая сумма и передается как аргумент конструктору потока.
1
TheThe
6 / 6 / 4
Регистрация: 26.06.2015
Сообщений: 83
31.07.2015, 23:59  [ТС] #10
Спасибо большое за объяснения!
0
31.07.2015, 23:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2015, 23:59
Привет! Вот еще темы с решениями:

Побитовые логические операции
Знайти!!!

Порядок вычисления: операторы «|» и «||», «&» и «&&»
В Java булевые операторы «|» и «||», и «&amp;» и «&amp;&amp;» отличаются друг от друга...

Записать логические выражения, используя условные операторы, операции отношений и логические операции
Записать логические выражения, используя условные операторы, операции отношений...

Friend ostream& operator<<(ostream& stream, CArr& obj);
CArr.h #pragma once class CArr{ int* arr = nullptr; int size = 10; void...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru