
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.18.167] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Привет!
Есть небольшой вопросик ![]() Определена переменная m_bCheck типа BOOL. Как инвертировать его значение? ![]() С типом bool я делала так: ![]() ![]() b=!b; |
Сообщ.
#2
,
|
|
|
Аналогично и c BOOL
|
Сообщ.
#3
,
|
|
|
![]() ![]() BOOL b = TRUE; b = !( (bool)b ); |
Сообщ.
#4
,
|
|
|
Цитата ss @ BOOL b = TRUE; b = !( (bool)b ); а так что не скомпиллеца или работать будет неправильно? : ![]() ![]() BOOL b = TRUE; b = !b; |
Сообщ.
#5
,
|
|
|
Всё ок, ты прав. Приводить к bool излишество. Но безопасное
![]() |
Сообщ.
#6
,
|
|
|
Что-то я совсем ступила
![]() Спасибо! Добавлено PS. меня сбило с толку, что BOOL это int, вот я и думала как целое число можно инвертировать. |
Сообщ.
#7
,
|
|
|
Значение у переменной типа bool можно инвертировать ещё и так:
![]() ![]() b ^= 1; Но в случае с BOOL так делать не стоит. |
Сообщ.
#8
,
|
|
|
Masterkent, даже в случае с bool так делать не стоит, ибо, на мой взгляд, ухудшает читаемость кода и не даёт чёткого представления о намерениях.
|
Сообщ.
#9
,
|
|
|
Никогда не видела такого интересного оператора b^=1. Проверила тоже работает!
А что он делает? PS. извините за возможно глупый вопрос. |
Сообщ.
#10
,
|
|
|
Это XOR, побитовое исключающее ИЛИ, описание тут, например.
Возвращает 0, если оба бита одинаковы, иначе 1. (Представь, что bool - это один бит. Пойми, и больше этого не представляй. ![]() ЗЫ, прошлый раз соврал насчёт значений, пардон. |
Сообщ.
#11
,
|
|
|
А понятно! Забыла, что оператор ^ означает XOR. Я с ним никогда не сталкивалась.
Вообще же наверное его чаще используют в языке Си и системном программировании? |
Сообщ.
#12
,
|
|
|
Цитата ss @ на мой взгляд, ухудшает читаемость кода А на мой взгляд, читаемость кода ухудшает двойное указание модифицируемого объекта. Вместо b может быть имя подлиннее или вообще какое-нибудь сложное выражение. Цитата ss @ и не даёт чёткого представления о намерениях Это известный приём, и никаких затруднений в понимании такого кода быть не должно, IMHO. Впрочем, я справа от ^= обычно использовал true вместо 1. |
Сообщ.
#13
,
|
|
|
А вот так:
![]() ![]() b=b?0:1; не подойдет? |
Сообщ.
#14
,
|
|
|
для bool как по мне идеал
![]() ![]() b ^= true; Скрытый текст а BOOL вообще использовать, имхо, фигово. к примеру, никак не пойму, для чего вообще TRUE задефайнили (разве что для того, чтобы приколоться над программистами, что результат winapi функции на TRUE проверят) |
Сообщ.
#15
,
|
|
|
Чо вы к этому XOR'у присохли? "b != b" чем не угодило?
А ещё прикольно, что ПРАВДА для BOOL и VARIANT_BOOL - разная. Дополнительный источник для "странных" ошибок. |