На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> BOOL , инвертировать значение
    Привет!

    Есть небольшой вопросик :blush: .
    Определена переменная m_bCheck типа BOOL. Как инвертировать его значение? :fool:

    С типом bool я делала так:
    ExpandedWrap disabled
      b=!b;
    Сообщение отредактировано: Marihuana -
      Аналогично и c BOOL
        ExpandedWrap disabled
          BOOL b = TRUE;
          b = !( (bool)b );
          Цитата ss @
          BOOL b = TRUE;
          b = !( (bool)b );

          а так что не скомпиллеца или работать будет неправильно? :
          ExpandedWrap disabled
            BOOL b = TRUE;
            b = !b;
            Всё ок, ты прав. Приводить к bool излишество. Но безопасное :)
              Что-то я совсем ступила :jokingly:
              Спасибо!

              Добавлено
              PS. меня сбило с толку, что BOOL это int, вот я и думала как целое число можно инвертировать.
                Значение у переменной типа bool можно инвертировать ещё и так:

                ExpandedWrap disabled
                  b ^= 1;

                Но в случае с BOOL так делать не стоит.
                  Masterkent, даже в случае с bool так делать не стоит, ибо, на мой взгляд, ухудшает читаемость кода и не даёт чёткого представления о намерениях.
                    Никогда не видела такого интересного оператора b^=1. Проверила тоже работает!
                    А что он делает?
                    PS. извините за возможно глупый вопрос.
                      Это XOR, побитовое исключающее ИЛИ, описание тут, например.
                      Возвращает 0, если оба бита одинаковы, иначе 1. (Представь, что bool - это один бит. Пойми, и больше этого не представляй. ;) )

                      ЗЫ, прошлый раз соврал насчёт значений, пардон.
                      Сообщение отредактировано: ss -
                        А понятно! Забыла, что оператор ^ означает XOR. Я с ним никогда не сталкивалась.
                        Вообще же наверное его чаще используют в языке Си и системном программировании?
                          Цитата ss @
                          на мой взгляд, ухудшает читаемость кода

                          А на мой взгляд, читаемость кода ухудшает двойное указание модифицируемого объекта. Вместо b может быть имя подлиннее или вообще какое-нибудь сложное выражение.

                          Цитата ss @
                          и не даёт чёткого представления о намерениях

                          Это известный приём, и никаких затруднений в понимании такого кода быть не должно, IMHO. Впрочем, я справа от ^= обычно использовал true вместо 1.
                            А вот так:
                            ExpandedWrap disabled
                                b=b?0:1;

                            не подойдет?
                              для bool как по мне идеал
                              ExpandedWrap disabled
                                b ^= true;


                              Скрытый текст
                              а BOOL вообще использовать, имхо, фигово. к примеру, никак не пойму, для чего вообще TRUE задефайнили (разве что для того, чтобы приколоться над программистами, что результат winapi функции на TRUE проверят)
                                Чо вы к этому XOR'у присохли? "b != b" чем не угодило?

                                А ещё прикольно, что ПРАВДА для BOOL и VARIANT_BOOL - разная. Дополнительный источник для "странных" ошибок.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0351 ]   [ 16 queries used ]   [ Generated: 22.04.25, 16:22 GMT ]