Bit field definition like Borland C++ or codevision

Thank you for every body

I read all responses and now I solve the problem for our project like following code , in this code I can access each bits in 64 bit memory location and let the compiler manage bits postion changing , only need to send spi data to the bus, if the code any mistake please help me to upgrade it

typedef struct {
unsigned long a1:3;
unsigned long a2:1;
unsigned long a3:1;
unsigned long a4:3;
unsigned long b:8;
unsigned long c:8;
unsigned long d:8;
unsigned long e:4;
unsigned long f:6;
}spi_bit_fields;

union data{
unsigned long long bits_holder;
spi_bit_fields control_bits;
};

void setup(){
union data x;
unsigned long long test_bits = 0xefaabbcc6d;

Serial.begin(115200);

printf("sizeof x is %dbytes\n",sizeof(x));

/* write to the union treating it as a single integer */
x.bits_holder = test_bits;

/* read from the union treating it as a bitfields structure */
printf("%x %x %x %x %x %x %x %x %x\n",
x.control_bits.a1,
x.control_bits.a2,
x.control_bits.a3,
x.control_bits.a4,
x.control_bits.b,
x.control_bits.c,
x.control_bits.d,
x.control_bits.e,
x.control_bits.f);

/* read from the union treating it as an integer /
/
Now we can send out each byte of data to spi bus */
printf("0 0x%x\n", *((unsigned char *) &x.bits_holder + 0));
printf("1 0x%x\n", *((unsigned char *) &x.bits_holder + 1));
printf("2 0x%x\n", *((unsigned char *) &x.bits_holder + 2));
printf("3 0x%x\n", *((unsigned char *) &x.bits_holder + 3));
printf("4 0x%x\n", *((unsigned char *) &x.bits_holder + 4));
printf("5 0x%x\n", *((unsigned char *) &x.bits_holder + 5));
printf("6 0x%x\n", *((unsigned char *) &x.bits_holder + 6));
}

void loop()
{

}

thanks a lot