Struct Bit Field

Struct Bit Field

Chúng ta có thể đặt các thành phần trong struct một số lượng bit nhất định.

1
2
3
4
5
struct {
  unsigned int age : 3; // đặt biến age có 3 bit
  unsigned int validate : 1; // đặt biến validate có 1 bit
} Age;
printf("%ld\n", sizeof(struct Age)); // -> 4

Khi gán các trường với số lượng byte vượt quá một byte đã khai báo thì các byte dư thừa sẽ được loại bỏ. Ngoài ra complier còn thông báo một cảnh báo (warning) khi gán giá trị vượt quá byte như vậy.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
struct Age {
  unsigned int age : 3; // đặt biến age có 3 bit
  unsigned int validate : 1; // đặt biến validate có 1 bit
};

struct Age age1;
age1.age = 7;
printf("age1.age : %d\n", age1.age); // -> 7

// Vì 8 trong hệ binary sẽ là 1000, 
// Biến age chỉ lấy 3 bit cuối nên giá trị của age là 0
age1.age = 8; // warning: 8 có nhiều hơn 3 bit
printf("age1.age : %d\n", age1.age); // -> 0