Khái niệm
Bit field dùng để xác định kích thước biến tính bằng bit. Thường được định nghĩa bên trong struct.
- 1 byte = 8 bit.
Ví dụ
struct info {
int x:2; // x chiếm 2 bit
};
Không thể gán giá trị ngoài phạm vi của bit field. Không dùng scanf cho bit field vì không thể lấy địa chỉ (&) hay sizeof. Kiểu dữ liệu cho phép: int, signed int, unsigned int.
Chương trình 1: Bit field kiểu unsigned int
#include <stdio.h>
struct info {
unsigned int x:3; // 3 bit
};
int main() {
struct info i;
i.x = 8; // ngoài phạm vi 0-7
printf("%d", i.x);
return 0;
}
Kết quả
0
Giải thích
- Phạm vi unsigned int n bit: 0 đến 2ⁿ⁻¹. Với n=3 => 0 đến 7.
- Gán 8 (1000₂) cắt bỏ bit cao => 000₂ = 0.
Chương trình 2: Bit field kiểu int (signed)
#include <stdio.h>
struct info {
int x:3; // 3 bit signed
};
int main() {
struct info i;
i.x = 4;
printf("%d", i.x);
return 0;
}
Kết quả
-4
Giải thích
- Phạm vi signed int n bit: -2ⁿ⁻¹ đến 2ⁿ⁻¹⁻¹. Với n=3 => -4 đến 3.
- 4 trong 3 bit signed là 100₂ => giá trị -4 (bù 2).