Bit Field ها در زبان C – آموزش زبان C

c bit fields 4151 Bit Field ها در زبان C   آموزش زبان C

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 اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *