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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 10:07   #1
phobos
Пользователь
 
Аватар для phobos
 
Регистрация: 19.04.2007
Сообщений: 35
Стрелка Битовые операции: как узнать значение отдельного бита?

Доброго времени суток всем!
Возник такой вопрос: как выдрать значение отдельного бита из переменной (например типа int)? Т.е. когда я задаю int a=13, то в битовом представлении получается а=0000 0000 0000 1101. Нужно считать все 0 и 1 и занести их в массив для дальнейшей обработки. Заранее благодарен )

ЗЫ. Знаком с битовыми операциями типа >>, <<, ^, &, |, но имхо их недостаточно для решения данной задачи.
phobos вне форума
Старый 29.04.2009, 10:44   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Достаточно. Смещаете вправо число и смотрите что в нулевом бите посредством & и так пока число не станет равно нулю. Если я еще не забыл логические операции, то как-то так будет:
Код:
n = 0; // номер проверяемого бита
while (a != 0)
{
  a >> 1;
  if (a & 1)
  {
    // бит №n установлен в единицу
  }
  else
  {
    // бит №n нулевой
  }
  ++n;
}
pu4koff вне форума
Старый 29.04.2009, 19:22   #3
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Только там не a >> 1, а a >>= 1, а то зациклится
Pashan вне форума
Старый 29.04.2009, 21:04   #4
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

можно еще вот так:
Код:
union BIT_FIELD {
	struct BITS {
		unsigned b0: 1;
		unsigned b1: 1;
		unsigned b2: 1;
		unsigned b3: 1;
		unsigned b4: 1;
		unsigned b5: 1;
		unsigned b6: 1;
		unsigned b7: 1;
	} bits;
	unsigned char value;
};
после установки значение в переменной value, структура bits заполнится битами. в некоторых случаях это удобный метод
vvviperrr вне форума
Старый 29.04.2009, 21:12   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Если только компилятор структуру не решит оптимизировать и не сделает b0 и другие размером в 4 байта
pu4koff вне форума
Старый 30.04.2009, 09:31   #6
phobos
Пользователь
 
Аватар для phobos
 
Регистрация: 19.04.2007
Сообщений: 35
По умолчанию

Спасибо за ответы )
pu4koff, код немного подправил: строчку "a >>= 1;" следует дописать после проверки условия (if-else), иначе в массиве теряется значение нулевого бита.
phobos вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Битовые операции, проблемы Sashko Общие вопросы C/C++ 2 27.03.2009 17:28
битовые операции, Pascal TOSAgrk Помощь студентам 2 02.02.2009 17:41
Битовые операции DrAlexx2121 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 14.06.2008 22:26
Битовые операции LEX.darnica Помощь студентам 14 23.12.2007 19:40
Битовые операции zetrix Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 15.12.2006 11:08