Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2012, 15:38   #1
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию Битовые операции

Здравствуйте! Столкнулся в интернете с интересным примером.

Xor

Код:
textbox1->Font->Style=textbox1->Font->Style ^ Style::Bold
Как я понял битовые операции возвращают 1 или 0;

В данном примере Xor будет возвращать Противоположное значение Style.
То есть это аналогично

Код:
if (textbox1->Font->Style==Style::Regular){
textbox1->Font->Style=Style::Bold;
}
if else(textbox1->Font->Style==Style::Bold){
textbox1->Font->Style=Style::Regular;
}
Все вроде бы логично так как на самом деле Style::Regular это 0 а Style::Bold это 1;

Но это работает и с Style::Italic где он равен 2

Код:
textbox1->Font->Style=textbox1->Font->Style ^ Style::Italic
Это тоже самое что:

Код:
if (textbox1->Font->Style==Style::Regular){
textbox1->Font->Style=Style::Italic;
}
if else(textbox1->Font->Style==Style::Italic){
textbox1->Font->Style=Style::Regular;
}
А еще можно и вот так даже сделать
Код:
textbox1->Font->Style=(textbox1->Font->Style ^ Style::Italic) | (Style=textbox1->Font->Style ^ Style::Bold)
Расскажите мне пожалуйста как это работает?
WizarD.89 вне форума Ответить с цитированием
Старый 23.11.2012, 15:42   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но и работает с Style::Italic где он равен 2
Потому что XOR это не инферсия бит. Это немножно другое, и если с числами 1 и 0 в которых только первый бит задействован это прокатывает то с числами больше швах.
Если ты хочешь исключить некоторый статус, то нужно оперировать операцией AND (&) для исключения. Примерно так:
Код:
Style & !Style::Bold
что выключит Bold
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2012, 15:43   #3
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

http://ru.wikipedia.org/wiki/%D0%A1%...BD.D0.B8.D0.B5
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 23.11.2012, 15:47   #4
WizarD.89
Форумчанин
 
Аватар для WizarD.89
 
Регистрация: 02.12.2010
Сообщений: 160
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если ты хочешь исключить некоторый статус, то нужно оперировать операцией AND (&) для исключения. Примерно так:
Код:
Style & !Style::Bold
что выключит Bold
Я сделал это с помощью XOR и я не понимаю как это работает, хочу понять как все это, кстати пример этот из учебника приведен
WizarD.89 вне форума Ответить с цитированием
Старый 23.11.2012, 15:58   #5
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

лень человеку википедию почитать где все написано подробно с табличками

xor возвращает число, сравнивая побитово 2 числа
на тех местах где биты разные ставит 1, в других случаях 0

textbox1->Font->Style=textbox1->Font->Style ^ Style::Bold будет переключать стиль
т.е. если включен то выключит, если выключен то включит
Контакты
skype, почта: bm@kwax.ru

Последний раз редактировалось Stilet; 23.11.2012 в 16:06.
masax вне форума Ответить с цитированием
Старый 23.11.2012, 16:40   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Как я понял битовые операции возвращают 1 или 0;
Вот где главная проблема... Это все равно, что сказать "+ возвращает 0-9". Да, битовые операции работают с битами (которые принимают значения 0 и 1), но это только "разряды числа"
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битовые операции С++ GXDoblin Помощь студентам 5 13.06.2011 12:44
Битовые операции ("")(Э_Є)("") Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 04.07.2009 13:19
Битовые операции ("")(Э_Є)("") Общие вопросы C/C++ 4 03.07.2009 19:15
Битовые операции DrAlexx2121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.06.2008 22:26