Форум программистов, компьютерный форум CyberForum.ru

XOR и поразрядное или не работают - C++

Восстановить пароль Регистрация
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 22:41     XOR и поразрядное или не работают #1
Собственно есть числа:
0011 0010 - bit_text[0]==1(идём справа налево)
0100 0011 - это биты val_bmp какого-то числа.

Мне надо bit_text[0] записать в самый младший бит val_bmp. Теперь как я рассуждал:
1.bit_text[0]==1 => то использую поразрядное или, чтобы в val_tmp самый младший бит был равен 1.
2.bit_text[0]!=1 => надо записать в val_tmp 0. Как это сделать? Надо использовать поразрядное исключающее или(XOR). В данном случае есть 2 случая: val_tmp==1 или val_tmp==0. Если val_tmp==1, то val_bmp=val_bmp^1 чтобы получился 0, а если там 0, то ничего не делаем, т.к. там уже как раз то число, которое нам нужно.

Собственно код, но почему-то не работает. Помогите решить проблему.
C
1
2
3
4
5
if(bit_text[0]==1) val_bmp=val_bmp|1; //если 1, то всегда будет 1 при поразрядном или
else
{
    if(val_bmp&1)val_bmp=val_bmp^1; //если там единица, то использую поразрядное исключающее или, если там 0, то ничего не делаем.
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
29.03.2013, 22:53     XOR и поразрядное или не работают #2
C++
1
2
3
4
if (bit_text[0]==0) 
  val_bmp &= ~1;
else
  val_bmp |= 1
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
29.03.2013, 22:56     XOR и поразрядное или не работают #3
При каком val_bmp наблюдается проблема?

Добавлено через 1 минуту
nonedark2008, тогда уж
C++
1
2
val_bmp &= ~1;
val_bmp |= bit_text[0];
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 23:03  [ТС]     XOR и поразрядное или не работают #4
Цитата Сообщение от I.M. Посмотреть сообщение
При каком val_bmp наблюдается проблема?

Добавлено через 1 минуту
nonedark2008, тогда уж
C++
1
2
val_bmp &= ~1;
val_bmp |= bit_text[0];
Если bit_text==1, то всё ок.
Если bit_text!=1, то
если val_bmp&1 - то бишь там стоит 1, значение true, то я пытаюсь сделать val_bmp=val_bmp^1; чтобы получилос 1-1=0 в XOR(если оба по единице, то будет ноль). Собственно здесь вот и ошибка.

Добавлено через 31 секунду
Цитата Сообщение от nonedark2008 Посмотреть сообщение
C++
1
2
3
4
if (bit_text[0]==0) 
  val_bmp &= ~1;
else
  val_bmp |= 1
Не могли бы вы прокомментировать ваш код? Я его не понимаю
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
29.03.2013, 23:37     XOR и поразрядное или не работают #5
Цитата Сообщение от aleksandr_t94 Посмотреть сообщение
Я его не понимаю
Если нужно установить 0, то берем 1, применяем к ней побитовое отрицание, получаем 0 в начале и все остальные - единицы, а далее побитовое И с нашим числом, получаем 0 в первом бите, а все остальное без изменеий. А если требуется установить 1, то просто побитовое ИЛИ.
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
30.03.2013, 10:27  [ТС]     XOR и поразрядное или не работают #6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Если нужно установить 0, то берем 1, применяем к ней побитовое отрицание, получаем 0 в начале и все остальные - единицы, а далее побитовое И с нашим числом, получаем 0 в первом бите, а все остальное без изменеий. А если требуется установить 1, то просто побитовое ИЛИ.
Понял, спасибо вам.
Yandex
Объявления
30.03.2013, 10:27     XOR и поразрядное или не работают
Ответ Создать тему
Опции темы

Текущее время: 10:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru