Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с битовыми полями - некоторые вопросы.

2.2K
04 июня 2006 года
e1vin
153 / / 04.06.2006
Нужно создать объединение, которое будет включать в себя массив из 3 символов (т.е. 3 байта) и 4 битовых поля по 6 бит.
Т.е. должна получиться такая организация:

 
Код:
|0|1|02|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|
|     char [ 0 ] |   сhar [ 1 ]        |       char [ 2 ]      |
|     ch1    |       ch2   |        ch3      |        ch4      |



Такое вот определение объединения:

union encode_buf
{
char c[3];
unsigned ch4: 6;
unsigned ch3: 6;
unsigned ch2: 6;
unsigned ch1: 6;
} buf;

не дает нужного результата - обратиться к разным символам из массива c можно, а 4 битовых поля содержат одно и то же число - 33. Что я делаю не так?
15K
06 июня 2006 года
foo
33 / / 03.06.2006
 
Код:
union encode_buf
{
    char c[3];
    struct {
         unsigned ch4: 6;
         unsigned ch3: 6;
         unsigned ch2: 6;
         unsigned ch1: 6;
    }
} buf;
2.2K
07 июня 2006 года
e1vin
153 / / 04.06.2006
foo, спасибо, до этого я уже сам допер, почитал мануалы и допер :)
Но теперь проблема в другом - в битовых полях биты идут в другом порядке...
Допустим, создаем те же самые битовые поля по 6 бит, 4 штуки.
Мне нужно чтобы старший разряд (шестой бит) располагался слева, например, чтобы число 4 было представлено как 000100, а оно представлено наоборот, как 001000... Как можно что-нибудь сделать без всяких нудных преобразований кучи одинаковых битов в целое число и т.п?

Какие есть вообще в С/С++ поразрядные операции, всякие там сдвиги? Киньте в меня линком, пожалуйста!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог