Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить значение бита в переменной, что-то не знаю 
V
    Опции темы
Kolia
Дата 23.1.2006, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Допустим а=5, что в двоичном формате 0101. Как мне узнать значение, например, первого бита
Код

int a=5
if(первый бит 0)
...
else
...

Cобственно все
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
sergejzr
Дата 23.1.2006, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



Код

cout<<(a>>31)<<endl;//двигает биты направо заполняя слева нулями



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
chipset
Дата 23.1.2006, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Код

template <typename T>
bool isbit(T val, char index)
{
return val&(0x1<<index); //вся соль -- здесь
}



--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
cardinal
Дата 23.1.2006, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Код

if(a & 0x01)
   то первый бит (в смысле самый правый :)) равен 1
else
   первый бит равен 0



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Kolia
Дата 23.1.2006, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 132
Регистрация: 11.7.2003
Где: Вильнюс

Репутация: нет
Всего: нет



Ясненько.

А если такая ситуация. Имею а=9, то бишь 1001 в двоичном. Двигаю биты на 1 влево. Соответственно самый крайний бит как бы вылетает: 0010. Неоходимо, чтобы он вернулся назад: 0011. Никакого встроеного механизма нет?

Только так:
1. Сдвигаем влево
2. Если перед сдвигом первый "1", то выполняем со сдвинутым и 0001 операцию ИЛИ
?

Это сообщение отредактировал(а) Kolia - 23.1.2006, 03:17
--------------------
Риспект
PM MAIL ICQ Skype GTalk MSN   Вверх
chipset
Дата 23.1.2006, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Цитата(Kolia @ 22.1.2006, 17:17 Найти цитируемый пост)


А если такая ситуация. Имею а=9, то бишь 1001 в двоичном. Двигаю биты на 1 влево. Соответственно самый крайний бит как бы вылетает: 0010. Неоходимо, чтобы он вернулся назад: 0011. Никакого встроеного механизма нет?

Не нужно этого для субжевого вопроса, имхо smile Обычно делаеться побитовым AND (&).

Именно для ротации битов поищи темку, тут где-то обсуждалось.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
ManiaK
Дата 24.1.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Цитата(Kolia @ 23.1.2006, 04:17 Найти цитируемый пост)

А если такая ситуация. Имею а=9, то бишь 1001 в двоичном. Двигаю биты на 1 влево. Соответственно самый крайний бит как бы вылетает: 0010. Неоходимо, чтобы он вернулся назад: 0011. Никакого встроеного механизма нет?


Любопытно, какая такая переменная используется, что у ней всего 4 бита, ну да ладно.

Для байтовой переменной будет так:
Код

Byte_t a = 9;
if((a <<= 1) & 0x10) a |= 1;

Добавлено @ 14:34
Если же всё-таки переменная - битовое поле, то можно так (не уверен, что всё это нужно, но мало ли):
Код

a & 8 ? (a <<= 1) |= 1 : a <<= 1;

PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.