С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89

Побитовое И и присваивание вместо простого присваивания

09.05.2015, 20:21. Показов 1635. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Встретил в коде интересный участок, где вместо присваивания используется также побитовое И.

Псевдокод:
C++
1
2
3
bool connect(arg arg1, arg arg2, arg arg3);
bool bOk = true;
bOk &= connect(a, b, c);
В каких целях используется побитовое И + присваивание?
Для ускорения производительности?

Ведь bool у нас уже true и допустим это любое позитивное число, например 1.
Допустим, connect возвращает true и это 2.

0001 & 0010 будет в итоге ноль, т.е. получим false.

Какой может быть смысл в данном коде?
Ведь даже по стандарту, true != 0, в результате поведение bOk непредсказуемо?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2015, 20:21
Ответы с готовыми решениями:

Присваивание указателей, вызов оператора присваивания класса
Если написать StrL **testStr; testStr = new StrL * ; testStr = new StrLBit("100001"); testStr = new StrLBit("0101"); testStr =...

Подстановка, вместо простого текста, PHP код
В разных системах управления контентом, в шаблонизаторе просто пишут так: "", вместо этого там подставляются, заранее заготовленные...

Почему используется *& вместо простого указателя и как это работает?
может кто-нибудь объяснить почему используется *& вместо простого указателя и как это работает? конкретно у метода D class proizvodcl :...

13
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
09.05.2015, 20:29
поразрядные логические операции применяются в бинарной арифметике. Данные операции работают с битами ячеек памяти, причём операнды и результат могут быть заданы в другой форме,

Добавлено через 1 минуту
X:Y:Z
0:0:0
0:1:0
1:0:0
1:1:1

Добавлено через 22 секунды
Обозначения: X, Y – операнды; Z – результат выполнения логической операции
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
09.05.2015, 20:29  [ТС]
Прошу прощения, вы мой вопрос хоть читали?
Почитайте его пожалуйста сначала.
0
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
09.05.2015, 21:07
Цитата Сообщение от kordax Посмотреть сообщение
Допустим, connect возвращает true и это 2.
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int main()
{
    bool k = 10;
    bool test = true;
    std::cout << "K: " << k << "\n";
    std::cout << "TEST: " << test << "\n";
    return 0;
}
Тип bool может принимать значения либо 0, либо 1 (при это все, что >=1 -> True) Или я чего-то не знаю? Как тогда функция, которая возвращает тип bool, может возвратить что-то отличное от 0 или 1?
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
09.05.2015, 22:22  [ТС]
При касте инт в bool, будет 1?
Не будет ведь, только компилятор ошибку даст.
0
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
09.05.2015, 22:26
kordax, Не могли бы вы привести пример

Если конкретно по этому коду:
C++
1
2
3
bool connect(arg arg1, arg arg2, arg arg3);
bool bOk = true;
bOk &= connect(a, b, c);
То как раз так и получается, что функция возвращает либо 0, либо 1 или я не прав?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
09.05.2015, 22:36
Цитата Сообщение от kordax Посмотреть сообщение
При касте инт в bool, будет 1?
нет
любое число, кроме 0, приведется к true, 0 соответственно false
обратно true будет 1,false 0
например вот такая штучка
C++
1
2
3
int b=?????
bool c=b;
int a=c;
положит в a 0 или 1 в зависимости от b
но это в С++ в стандарте Си я не слишком силен
Цитата Сообщение от kordax Посмотреть сообщение
C++
1
2
3
bool connect(arg arg1, arg arg2, arg arg3);
bool bOk = true;
bOk &= connect(a, b, c);
по моему это выпендреж
вполне достаточно
C++
1
2
bool connect(arg arg1, arg arg2, arg arg3);
bool bOk = connect(a, b, c);
Добавлено через 1 минуту
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Тип bool может принимать значения либо 0, либо 1
значения он принимает true и false
0 и 1 получается при приведении к целочисленному

Добавлено через 48 секунд
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
при это все, что >=1 -> True
а если меньше? например -1?
0
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
09.05.2015, 23:04
Цитата Сообщение от ValeryS Посмотреть сообщение
а если меньше? например -1?
А если меньше, то тоже 1 ^_^.
правильнее было написать все, что отлично от 0. Моя ошибка

Добавлено через 6 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
значения он принимает true и false
Является ли это принципиальной разницей?

C++
1
bool — это целочисленный тип, который может иметь одно из двух значений: true или false. Его размер не определен.
https://msdn.microsoft.com/ru-... 53fe1.aspx
Таким образом, bool принимает числа или все-таки правильнее говорить значения true или false?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
09.05.2015, 23:04
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
А если меньше, то тоже 1 ^_^.
то тоже true, сиречь ИСТИНА,
у bool есть только true и false, и хотя они принимают на низком уровне значения 1 и 0, никто это не обещал
я например встречал размер bool и равный размеру int и char и даже вообще один бит, как компилятор захочет так и сделает
в ранеших VS был тип BOOL так там TRUE был -1 очень удобно инвертировать
1
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
09.05.2015, 23:06
ValeryS, спасибо, теперь мой вопрос выше исчерпан

Не по теме:

Точно. написано ведь

Его размер не определен.

0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
09.05.2015, 23:06
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Таким образом, bool принимает числа
нет логические значения ИСТИНА и ЛОЖЬ
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
все-таки правильнее говорить значения true или false?
так правильно
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
09.05.2015, 23:11  [ТС]
ValeryS меня понял, я это и имел ввиду.
Код какой-то бред, который приведёт к ситуации, что bool может стать false в случае возврата другого числа, отличного от того, которым проинициализирован bOk.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
09.05.2015, 23:22
Цитата Сообщение от kordax Посмотреть сообщение
в случае возврата другого числа, отличного от того, которым проинициализирован bOk.
функция вернет или true или false, третьего не дано
соответствено
true&false=false
true&true=true;
что вернет функция то и положится в bOk
Цитата Сообщение от kordax Посмотреть сообщение
Псевдокод:
не мог ли ты привести реальный код? может там есть какие нибудь нюансы
поскольку побитовые операции для bool неопределены (или я про это не знаю) то результат возвращенный функцией и bOk приведутся к int потом произойдет И и опять к типу bool
хотя на результат это не повлияет
как например здесь
C++
1
2
 int b=?????
int a=!!b;
только наоборот
b приводится к bool если не 0 то true если 0 то false потом два раза инвертируется и опять приводится к int
в результате если в b не 0 то в a 1 если в b 0 то в a 0
0
 Аватар для kordax
4 / 4 / 2
Регистрация: 08.06.2014
Сообщений: 89
10.05.2015, 01:33  [ТС]
Код из книжки, приводить особо нечего.
Ты вот меня вразумил, указав правильную последовательность работы оператора.
Если сначала они приведутся к int, а далее произойдёт И, то никаких проблем нет, получается И просто лишним.
Тогда ничего страшного.

Добавлено через 7 минут
Короче все будет нормально, если функция не возвращает int.
Тогда будет следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
using namespace std;
 
int true1()
{
    return 1;
}
 
int true2()
{
    return 2;
}
 
int main()
{
   bool bOk1 = true;
   bool bOk2 = true;
    
   bOk1 &= true1();
   bOk2 &= true2();
    
   if (!bOk1)
      cout << "bOk1 == false" << endl;
   else
      cout << "bOk1 == true" << endl;
      
   if (!bOk2)
      cout << "bOk2 == false" << endl;
   else
      cout << "bOk2 == true" << endl;
   
   return 0;
}
Bash
1
2
bOk1 == true                                                                                                                                                                                                                                                                                                 
bOk2 == false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2015, 01:33
Помогаю со студенческими работами здесь

Запускается "Сохранить как" вместо простого сохранения
Всем привет! Столкнулся с такой проблемой в VS 2015. После редактирования файла нажимаю сочетание клавиш для сохранения файла Ctrl+S или...

Нужны исходники простого простого приложения под Android для примера
можете дать ссылку на приложение под андроид?не Hello Word а какое нибудь другое но тоже простое на подобие этого ?хочу понять как...

Простой выбор простого движка для простого сайта с простой БД
Здравствуйте, уважаемые знатоки! Встала задача - нужно выбрать простой движок для сайта по аренде квартир Принцип работы прост до...

Побитовое И
Добрый вечер всем,подскажите пожалуйста,на каком примере можно рассмотреть такой факт,что побитовое И не эквивалентно логическому И. C#....

Побитовое сложение
реализовать сложение, т.е. когда мы складываем 1 и 1, получаем 10, таким образом в соответствующий бит записываем 0, а в старший переносим...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru