Во-первых, от K & R: «Почти все в битовых полях зависит от реализации».
В MS Visual Studio 2008 работают следующие функции:
#include <stdio.h>
#include <string.h>
struct bitbag {
unsigned int ch2 : 6;
unsigned int ch1 : 6;
};
int main ()
{
struct bitbag bits;
memset(&bits, 0, sizeof(bits));
bits.ch1 = 0x17; // 010111
bits.ch2 = 0x10; // 010000
printf ("0x%06x 0x%06x\n", bits.ch1, bits.ch2);
printf ("0x%0x\n", bits);
return 0;
}
Производит вывод:
0x000017 0x000010
0x5d0
Однако я не мог гарантировать, что он будет работать одинаково во всех компиляторах. Обратите внимание на memset
, который инициализирует любой отступ до нуля.