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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
#1

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

29.03.2013, 22:41. Просмотров 494. Ответов 5
Метки нет (Все метки)

Собственно есть числа:
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, то ничего не делаем.
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2013, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос XOR и поразрядное или не работают (C++):

"Поразрядное Исключающее Или" с присваиванием - C++
Бъясните пожалуйста как работает "Поразрядное исключающее ИЛИ с присваиванием(^=)" на примере: mass^= mass^= mass^= mass;

Побитовое исключающее ИЛИ (XOR) - C++
Что делает Побитовое исключающее ИЛИ (XOR)? Например a^b ?

Xor или что-то ещё? - C++
Не могу понять, что делает "XOR" (или что это ещё) в данной функции, созданной Window Forms : private: System::Void...

Зашифровать картинку или любой другой файл XOR шифрованием - C++
Привет. Мне нужно зашифровать картинку, или любой другой файл XOR шифрованием. Как сделать текст я знаю, но вот как картинку? Открывать же...

Поразрядное отрицание - C++
В общем мне нужно посторить транслятор программ заданного языка, реализующий механизм рекурсивного спуска. Все работает кроме...

Поразрядные поразрядное И (&) - C++
есть такой пример a%16 = a&(16-1) как преобразовать тогда тогда a%2, a%3, a%4, a%10? Добавлено через 13 минут извините за...

5
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
29.03.2013, 22:53 #2
C++
1
2
3
4
if (bit_text[0]==0) 
  val_bmp &= ~1;
else
  val_bmp |= 1
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
29.03.2013, 22:56 #3
При каком val_bmp наблюдается проблема?

Добавлено через 1 минуту
nonedark2008, тогда уж
C++
1
2
val_bmp &= ~1;
val_bmp |= bit_text[0];
0
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
29.03.2013, 23:03  [ТС] #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
Не могли бы вы прокомментировать ваш код? Я его не понимаю
0
nonedark2008
914 / 653 / 137
Регистрация: 28.07.2012
Сообщений: 1,767
29.03.2013, 23:37 #5
Цитата Сообщение от aleksandr_t94 Посмотреть сообщение
Я его не понимаю
Если нужно установить 0, то берем 1, применяем к ней побитовое отрицание, получаем 0 в начале и все остальные - единицы, а далее побитовое И с нашим числом, получаем 0 в первом бите, а все остальное без изменеий. А если требуется установить 1, то просто побитовое ИЛИ.
1
aleksandr_t94
0 / 0 / 0
Регистрация: 27.01.2013
Сообщений: 100
30.03.2013, 10:27  [ТС] #6
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Если нужно установить 0, то берем 1, применяем к ней побитовое отрицание, получаем 0 в начале и все остальные - единицы, а далее побитовое И с нашим числом, получаем 0 в первом бите, а все остальное без изменеий. А если требуется установить 1, то просто побитовое ИЛИ.
Понял, спасибо вам.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2013, 10:27
Привет! Вот еще темы с ответами:

Поразрядное сравнение чисел - C++
Здравствуйте. Нужно написать программу сравнения двух чисел размера N. Они должны быть представлены в виде целочисленных массивов. Кто-...

Файловые потоки типа wifstream и (или) wofstream неправильно работают - C++
Друзья! Есть двустрочный файл в кодировке UTF-16LE, нужно с него считать две строки и перегнать их в другой файл. В общем, копировать таким...

С какими библиотеками .lib или .dll програмы работают быстрее? - C++
С какими библиотеками .lib или .dll програмы работают быстрее? и почему?

Исключающее ИЛИ (XOR). Нужен пример операции побайтного XOR - Matlab
Может кто-нибудь привести пример операции побайтного XOR?что-то вроде: есть данные,считанные из файла любого формата,эти данные по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
30.03.2013, 10:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru