Bit Field ها در زبان C
فرض کنید برنامه شما شامل یک ساختار با نام status و تعدادی متغیر عضو TRUE / FALSE باشد. مانند نمونه زیر:
struct { unsigned int widthValidated; unsigned int heightValidated; } status;
ساختار بالا در حالت عادی به ۸ بایت از فضای حافظه نیاز دارد، اما ما فقط می خواهیم مقادیر ۰ و ۱ را در این دو متغیر ذخیره کنیم. در چنین شرایطی زبان برنامه نویسی C راه بهتری را ارائه می دهد. اگر از این متغیرها درون ساختار استفاده می کنید، می توانید تعداد بایت هایی که آن متغیرها می گیرند را تنظیم کنید. مانند نمونه زیر:
struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status;
ساختار بالا برای ذخیره متغیرها به ۴ بایت از فضای حافظه نیاز دارد، اما برای ذخیره مقادیر این متغیرها فقط ۲ بیت استفاده می شود. مثال زیر نحوه کارکرد Bit Field ها را نشان می دهد:
#include <stdio.h> #include <string.h> /* define simple structure */ struct { unsigned int widthValidated; unsigned int heightValidated; } status1; /* define a structure with bit fields */ struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status2; int main( ) { printf( "Memory size occupied by status1 : %d\n", sizeof(status1)); printf( "Memory size occupied by status2 : %d\n", sizeof(status2)); return 0; }
امتحان کنید
زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Memory size occupied by status1 : 8 Memory size occupied by status2 : 4
اعلان Bit Field
شکل کلی اعلان Bit Field به صورت زیر می باشد:
struct { type [member_name] : width ; };
توضیحات اعلان بالا را در جدول زیر مشاهده می کنید:
ردیف | توضیحات |
۱ | type
یک نوع integer می باشد که نوع تفسیر bit field را تعیین می کند. |
۲ | member_name
نام bit field را مشخص می کند. |
۳ | width
تعداد بیت در bit field را مشخص می کند، تعداد بیت ها باید کمتر یا برابر با type باشد. |
متغیری که با تعداد بیت مشخص شده تعریف شود، Bit Field نامیده می شود. یک bit field می تواند بیش از یک بیت را نگه دارد. مثلا اگر شما یک متغیر برای ذخیره یک مقدار از ۰ تا ۷ نیاز دارید، می توانید یک bit field با عرض ۳ بیت به صورت زیر تعریف کنید:
struct
struct { unsigned int age : 3; } Age;
ساختار فوق به کامپایلر می گوید که متغیر age فقط ۳ بیت برای ذخیره سازی مقدار استفاده می کند و امکان استفاده از بیش از ۳ بیت وجود ندارد. مثال زیر این موضوع را به خوبی نشان می دهد:
#include <stdio.h> #include <string.h> struct { unsigned int age : 3; } Age; int main( ) { Age.age = 4; printf( "Sizeof( Age ) : %d\n", sizeof(Age) ); printf( "Age.age : %d\n", Age.age ); Age.age = 7; printf( "Age.age : %d\n", Age.age ); Age.age = 8; printf( "Age.age : %d\n", Age.age ); return 0; }
امتحان کنید
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0
نوشته Bit Field ها در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.