Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Подскажите, корректно ли общаться с типом bool используя битовые операции, к примеру для модификации флага. Встретил в чужом коде, чувствую что-то не то, но объяснить не могу или зря волнуюсь? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. или лучше и надежней Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. если лучше, то почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 17:50 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
da17чувствую что-то не то Правильно чувствуешь. Ибо бред. Код: sql 1. Всё, телемаркет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 18:02 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
da17Подскажите, корректно ли общаться с типом bool используя битовые операции, к примеру для модификации флага. Некорректно. По стандарту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 18:25 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
MasterZivНекорректно. По стандарту. Стандарт С++ запрещает неявное приведение буля к целому и обратно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 18:27 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovMasterZivНекорректно. По стандарту. Стандарт С++ запрещает неявное приведение буля к целому и обратно?.. Туда -- нет. Обратно -- да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 18:28 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
MasterZivDimitry Sibiryakovпропущено... Стандарт С++ запрещает неявное приведение буля к целому и обратно?.. Туда -- нет. Обратно -- да. А, хотя, парни, могу уже и наврать... Что-то я давно не брал в руки шашек... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 18:29 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
da17, замени bool на int. Почувствуй вкус свободы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 19:04 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Если не путаю, то по стандарту 0 это false, а все остальное true. Тогда |= true равносильно = true. Но true & true может оказаться false, поэтому не стоит битовые операции использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 19:47 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли не путаю, то по стандарту 0 это false, а все остальное true путаешь и сильно bool - не числовой тип ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 20:01 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
bool - презерватив в сях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 20:03 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TЕсли не путаю, то по стандарту 0 это false, а все остальное true путаешь и сильно bool - не числовой тип А какой? что же тогда компилятор не ругается на битовые операции с ним? как это в асме выражается после компиляции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:06 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Dima Tчто же тогда компилятор не ругается на битовые операции с ним? приведение к целому и обратно автоматически делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:11 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Dima Tкак это в асме выражается после компиляции? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:21 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Не, в одну строчку плохо будет смотреться. Там несколько проверок датчиков, если все норм., то флаг остается false, не хочу тут спорить о архитектуре и т.д. Немного некомфортно, т.к. приходится проверять себя, правильно ли я понял, что "хотел сказать автор". Как-то битовые для битовых структур, логические для bool. Непривычно. Но если все корректно с точки зрения стандарта, значит кому-то так удобней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:25 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
1) В числовом контексте bool неявно приводится к 0 и 1. 2) В булевом контексте число неявно приводится к false (0) и true (остальные значения). 3) Для битовых операций аргументы неявно приводятся к int 4) Это все описано в стандарте С++. Таки образом битовые операции над bool полностью легальны и их результат точно определен стандартом. Речь идет только про встроенный тип bool в С++. В языке С bool это обычно int и там возможны эффекты связанные что int может принимать значения помимо 0 и 1. Хотя обычно никаких проблем и там нет, если всегда гарантировать что в переменных значения только 0 и 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:27 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Dima T, |=true равносильно =true, но это не равносильно & true. В данном случае если флаг был спрошен в true дальше будет выполняться побитовое или. Я так понял под true & true !=true, вы имеете в виду случай 255+1 если у нас на хранение результата выделяется лишь один байт. Я вас правильно понял? Т.е. в данном случае нам такое не грозит или грозит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:35 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
da17Подскажите, корректно ли общаться с типом bool используя битовые операции, к примеру для модификации флага. Встретил в чужом коде, чувствую что-то не то, но объяснить не могу или зря волнуюсь? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. или лучше и надежней Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. если лучше, то почему? Оба кода абсолютно корректны. Но первый смотрится глуповато. А второй не очень красив. Так лучше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Вот так смотрится странно (похоже на ошибку), но работать будет: Код: plaintext 1. 2. 3. Но лучше так: Код: plaintext 1. 2. 3. В вариантах с двумя функциями в одном условии нужно помнить про укороченную форму вычисления логических выражений! Это очень важно. Последние два моих кода идентичны друг другу, но не идентичны моему первому коду!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:36 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky1) В числовом контексте bool неявно приводится к 0 и 1. 2) В булевом контексте число неявно приводится к false (0) и true (остальные значения). 3) Для битовых операций аргументы неявно приводятся к int 4) Это все описано в стандарте С++. Таки образом битовые операции над bool полностью легальны и их результат точно определен стандартом. Речь идет только про встроенный тип bool в С++. В языке С bool это обычно int и там возможны эффекты связанные что int может принимать значения помимо 0 и 1. Хотя обычно никаких проблем и там нет, если всегда гарантировать что в переменных значения только 0 и 1. Ясно. Поясните пожалуйста, что означает "хотя обычно никаких проблем нет", т.е. есть такие ситуации когда проблемы могут быть? Можете пример привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:37 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
petrav, да так гораздо лучше. Согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:39 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
da17, Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:40 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Ну и с & еще неприятнее. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:43 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
petravНо лучше так: Код: plaintext 1. 2. 3. опасное это дело, хер его знает какие побочные эффекты имеет secondCond(), мож таймер какой взводит, мож железка из COM -порта читает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:47 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
ИзопропилpetravНо лучше так: Код: plaintext 1. 2. 3. опасное это дело, хер его знает какие побочные эффекты имеет secondCond(), мож таймер какой взводит, мож железка из COM -порта читает Я написал про укороченную форму вычисления логических выражений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:48 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyda17, Код: plaintext 1. 2. 3. в данном случае true в скобках как 1 рассматривается? Т.е. я правильно понимаю, (3) == true это будет false? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:50 |
|
||
|
Битовые операции с типом bool
|
|||
|---|---|---|---|
|
#18+
Вообще мне кажется хорошим тоном не пользоваться неявным приведением типов к bool. А писать прямо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2015, 21:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39078106&tid=2018796]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
77ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 297ms |
| total: | 467ms |

| 0 / 0 |
