|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. Что я делаю не так?
Код:
union encode_buf
{
char c[3];
struct {
unsigned ch4: 6;
unsigned ch3: 6;
unsigned ch2: 6;
unsigned ch1: 6;
}
} buf;
{
char c[3];
struct {
unsigned ch4: 6;
unsigned ch3: 6;
unsigned ch2: 6;
unsigned ch1: 6;
}
} buf;
Но теперь проблема в другом - в битовых полях биты идут в другом порядке...
Допустим, создаем те же самые битовые поля по 6 бит, 4 штуки.
Мне нужно чтобы старший разряд (шестой бит) располагался слева, например, чтобы число 4 было представлено как 000100, а оно представлено наоборот, как 001000... Как можно что-нибудь сделать без всяких нудных преобразований кучи одинаковых битов в целое число и т.п?
Какие есть вообще в С/С++ поразрядные операции, всякие там сдвиги? Киньте в меня линком, пожалуйста!