Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как определить значение бита в переменной


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

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

Cобственно все

Автор: sergejzr 23.1.2006, 02:45
Код

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

Автор: chipset 23.1.2006, 02:52
Код

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

Автор: cardinal 23.1.2006, 02:53
Код

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

Автор: Kolia 23.1.2006, 03:17
Ясненько.

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

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

Автор: chipset 23.1.2006, 03:21
Цитата(Kolia @ 22.1.2006, 17:17 Найти цитируемый пост)


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

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

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

Автор: ManiaK 24.1.2006, 14: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;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)