Поменяйте местами union
с вашим struct
.
Т.е. я считаю, что вы хотите объединить структуру и целое число, а не структуру объединения и целое число. (Я сохранил вводящее в заблуждение имя myStruct_t
, которое, вероятно, сейчас должно быть myUnion_t
.)
#include <stdio.h>
#include <stdint.h>
union
{
struct
{
uint8_t bit1 :1 ;
uint8_t bit2 :1 ;
uint8_t bit3 :1 ;
uint8_t bit4 :1 ;
uint8_t bit5 :1 ;
uint8_t bit6 :1 ;
uint8_t bit7 :1 ;
uint8_t bit8 :1 ;
}bits;
uint8_t trial;
}myStruct_t;
int main(int argc, char *argv[])
{
myStruct_t.trial=0; // use the encompassing union member for init
myStruct_t.bits.bit1 = 1; // now use the bitwise view to set bits
myStruct_t.bits.bit2 = 0;
printf("%x",myStruct_t.trial);
printf("%x",myStruct_t.bits.bit1);
printf("%x",myStruct_t.bits.bit2);
return 0;
}
Вывод, который я получаю, равен 110, вы можете увидеть 12810. Помимо отсутствующих символов новой строки, которые помогло, это означает:
- охватывающее 8-битное представление имеет значение 1, по крайней мере, с учетом порядка в моем окружении - вы можете увидеть 128
- бит 1 имеет значение 1
- бит 2 имеет значение 0