LINUX.ORG.RU

помогите разложить byte на bit


0

0

Пробовал разложить вот так
unsigned char LS;
bool LSB;
LSB=LS;
if (LSB==true) {lcd0_0->setPaletteForegroundColor(red);}
LSB=LS >> 1;
if (LSB==true) {lcd1_0->setPaletteForegroundColor(red);}
LSB=LS >> 2;
if (LSB==true) {lcd2_0->setPaletteForegroundColor(red);}

пробовал по другому
LSB=LS;
LS=LS/2;
LSB=LS;
но получаю неправильный результат
то есть для числа 2 получаю такой же результат как для числа три
что я делаю не так? может проблемма в компиляторе gcc 3.2.2 20030222 (REDHAT...


Маску добавь, т.е.

LSB=LS & 1;
...
LSB=((LS>>1) & 1);
...
LSB=((LS>>2) & 1);

kosmonavt
()

> bool LSB;

Что до сдвига, что после сдвига, как хранится bool, как трактуется bool?

А побитовое AND со степенью двойки не "то"?

anonymous
()
Ответ на: комментарий от anonymous

я так и пытался делать по идее что деление на 2 что сдвиг вправо долен уничтожатьпервый бит а операция приравнять должна считываьб младьший бит, наверное компилятор все оптимизировал пришлось пользоваться маской

rh9
() автор топика

	Здравствуйте, граждане.

	Как насчет:

	union bb
	{
		unsigned char	byte;
		struct
		{
			unsigned bit0:1;
			unsigned bit1:1;
			unsigned bit2:1;
			unsigned bit3:1;
			unsigned bit4:1;
			unsigned bit5:1;
			unsigned bit6:1;
			unsigned bit7:1;
		} bits;
	};

	bb	LS;

	Ну а дальше, соответственно, LS.byte есть байт, а LS.bits.bit0 есть 0 бит. Битовые поля называются :-).

	Маска тоже хорошо:

	int i;
	unsigned char LS;

	for(i = 1;i <= 128; i *= 2)
		if (LS & i)
			switch (i)
			{
				case 1:
					/* 0 бит */
					....
				case 2:
					/* 1 бит */
					....
				case 4:
					/* 2 бит */
					....
				....
				case 128:
					/* 7 бит */
					....
			}

	Зачем геморой с bool - не знаю.

lego_12239
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.