یک بیت فیلد یک ساختار داده مورد استفاده در برنامهنویسی کامپیوتر است. بیت فیلد متشکل از تعدادی خانهٔ مجاور حافظه است که برای نگهداشتن دنبالهای از بیتها اختصاص داده شدهاند و میتوان هر تک بیت یا گروهی از آنها را استفاده کرد.[۱][۲]
معنی تکتک بیتها در فیلد توسط برنامهنویس مشخص میشود. برای مثال اولین بیت در یک بیت فیلد (در آدرس پایه فیلد) بعضی مواقع برای تعیین یک خصوصیت خاص مرتبط با فیلد استفاده میشود.[۳]
پیادهسازی
بیت فیلدها میتوانند برای کم کردن استفاده از حافظه زمانی که برنامه نیاز به اعدادی که همیشه مقادیر پایینی دارند، استفاده میشوند. برای مثال در بسیاری از سیستمها، ذخیرهسازی یک مقدار صحیح نیاز به دو بایت (۱۶ بیت) از حافظه دارد؛ گاهی اوقات مقداری که باید ذخیره شود تنها به یک یا دو بیت نیاز دارد. با داشتن تعدادی از این متغیرهای کوچک یک بیت فیلد اجازه میدهد تا دادهها کارآمدتر در حافظه ذخیره شوند.[۴]
در سی و سیپلاسپلاس، بیت فیلدهای بومی میتوانند با unsigned int یا signed int یا _Bool (در C99) ایجاد شوند. در اینجا برنامهنویس میتواند یک ساختار تعریف کند و عرض هر زیرفیلد را مشخص کند.
برای زبانهای فاقد بیت فیلدهای بومی یا زمانی که برنامهنویس میخواهد کنترل سختگیرانهای بر نتیجه داشته باشد، میتوان از یک نوع کلمهٔ بزرگتر استفاده کرد. در اینجا برنامهنویس میتواند بیتها را با استفاده از ترکیبی از عملیات بیتی و ماسکها تغییر دهد.[۵]
نمونهها
زبان برنامهنویسی سی
تعریف یک بیت فیلد در زبان سی
// مات و شفاف
#define YES 1
#define NO 0
// سبک خطها
#define SOLID 1
#define DOTTED 2
#define DASHED 3
// رنگهای اولیه
#define BLUE 4 /* 100 */
#define GREEN 2 /* 010 */
#define RED 1 /* 001 */
// رنگهای مخلوط
#define BLACK 0 /* 000 */
#define YELLOW (RED | GREEN) /* 011 */
#define MAGENTA (RED | BLUE) /* 101 */
#define CYAN (GREEN | BLUE) /* 110 */
#define WHITE (RED | GREEN | BLUE) /* 111 */
const char * colors[8] = {"Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"};
// مشخصات جعبه بیت فیلد
struct box_props
{
unsigned int opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4; // پرکردن تا ۸ بیت
unsigned int show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned char : 0; // پرکردن تا نزدیک ترین بایت (۱۶ بیت)
unsigned char width : 4, // تقسیم یک بایت به دو فیلد ۴ بیتی
height : 4;
};
منابع
֗֗֗