บิตฟิลด์ (Bit Field) ใช้ระบุขนาดของตัวแปรในหน่วยบิต โดยทั่วไปนิยามภายในโครงสร้าง (Structure)
- บิตฟิลด์: 1 ไบต์ = 8 บิต
ตัวอย่าง:
struct info {
int x:2;
};ที่นี่ x ใช้พื้นที่ 2 บิต
ไม่ถูกต้องที่จะกำหนดค่าให้บิตฟิลด์เกินช่วงที่กำหนด
ไม่สามารถใช้ scanf เพื่อรับค่าบิตฟิลด์ได้ เนื่องจาก sizeof และตัวดำเนินการที่อยู่ (&) ไม่สามารถใช้กับบิตฟิลด์ได้
ชนิดข้อมูลที่กำหนดให้บิตฟิลด์ได้คือ int, signed int, unsigned int
โปรแกรม
โปรแกรม C สำหรับ unsigned int:
#include <stdio.h>
struct info {
unsigned int x:3; // กำหนดบิตฟิลด์ให้ unsigned int ภายในโครงสร้าง
};
int main() {
struct info i;
i.x = 8;
printf("%d", i.x);
return 0;
}ผลลัพธ์
ผลลัพธ์มีดังนี้:
0
คำอธิบาย
สูตรช่วงสำหรับ unsigned int คือ 0 ถึง 2^n - 1 โดย n = จำนวนบิต
ที่นี่ n = 3 หมายถึง unsigned int อยู่ระหว่าง 0 ถึง 2^3 - 1 = 0 ถึง 7

โปรแกรม
โปรแกรม สำหรับ int:
#include <stdio.h>
struct info {
int x:3; // กำหนดบิตฟิลด์ให้ int ภายในโครงสร้าง
};
int main() {
struct info i;
i.x = 4;
printf("%d", i.x);
return 0;
}ผลลัพธ์
จะได้ผลลัพธ์ดังนี้:
-4
คำอธิบาย
- สูตรช่วงสำหรับ signed int = (-2^(n-1)) ถึง 2^(n-1) - 1 โดย n คือจำนวนบิต
- ในโปรแกรม n = 3
- แทนค่าในสูตรจะได้ผลลัพธ์ดังนี้:
= (-2^(3-1)) ถึง 2^(3-1) - 1 = (-2^2) ถึง 2^2 - 1 = -4 ถึง 3 คือ -4, -3, -2, -1, 0, 1, 2, 3