1 #include <stdint.h> 2 3 struct Bits { 4 uint32_t : 1; 5 uint32_t b1 : 1; 6 uint32_t b2 : 2; 7 uint32_t : 2; 8 uint32_t b3 : 3; 9 // Unnamed bitfield (this will get removed). 10 uint32_t : 2; 11 uint32_t b4 __attribute__ ((aligned(16))); 12 uint32_t b5 : 5; 13 uint32_t b6 : 6; 14 uint32_t b7 : 7; 15 uint32_t four : 4; 16 }; 17 18 struct MoreBits { 19 uint32_t a : 3; 20 uint8_t : 1; 21 uint8_t b : 1; 22 uint8_t c : 1; 23 uint8_t d : 1; 24 }; 25 struct MoreBits more_bits; 26 27 struct ManySingleBits { 28 uint16_t b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1, b8 : 1, 29 b9 : 1, b10 : 1, b11 : 1, b12 : 1, b13 : 1, b14 : 1, b15 : 1, b16 : 1, 30 b17 : 1; 31 }; 32 struct ManySingleBits many_single_bits; 33 34 struct LargePackedBits { 35 uint64_t a : 36; 36 uint64_t b : 36; 37 } __attribute__((packed)); 38 39 #pragma pack(1) 40 struct PackedBits { 41 char a; 42 uint32_t b : 5, c : 27; 43 }; 44 #pragma pack() 45 46 int main(int argc, char const *argv[]) { 47 struct Bits bits; 48 bits.b1 = 1; 49 bits.b2 = 3; 50 bits.b3 = 7; 51 bits.b4 = 15; 52 bits.b5 = 31; 53 bits.b6 = 63; 54 bits.b7 = 127; 55 bits.four = 15; 56 57 more_bits.a = 3; 58 more_bits.b = 0; 59 more_bits.c = 1; 60 more_bits.d = 0; 61 62 many_single_bits.b1 = 1; 63 many_single_bits.b5 = 1; 64 many_single_bits.b7 = 1; 65 many_single_bits.b13 = 1; 66 67 struct PackedBits packed; 68 packed.a = 'a'; 69 packed.b = 10; 70 packed.c = 0x7112233; 71 72 struct LargePackedBits large_packed = 73 (struct LargePackedBits){0xcbbbbaaaa, 0xdffffeeee}; 74 struct LargePackedBits *large_packed_ptr = &large_packed; 75 76 return 0; // break here 77 } 78