بیت فیلد

از ویکی‌پدیا، دانشنامهٔ آزاد

یک بیت فیلد یک ساختار داده مورد استفاده در برنامه‌نویسی کامپیوتر است. بیت فیلد متشکل از تعدادی خانهٔ مجاور حافظه است که برای نگه‌داشتن دنباله‌ای از بیت‌ها اختصاص داده شده‌اند و می‌توان هر تک بیت یا گروهی از آنها را استفاده کرد.[۱][۲]

معنی تک‌تک بیت‌ها در فیلد توسط برنامه‌نویس مشخص می‌شود. برای مثال اولین بیت در یک بیت فیلد (در آدرس پایه فیلد) بعضی مواقع برای تعیین یک خصوصیت خاص مرتبط با فیلد استفاده می‌شود.[۳]

پیاده‌سازی[ویرایش]

بیت فیلدها می‌توانند برای کم کردن استفاده از حافظه زمانی که برنامه نیاز به اعدادی که همیشه مقادیر پایینی دارند، استفاده می‌شوند. برای مثال در بسیاری از سیستم‌ها، ذخیره‌سازی یک مقدار صحیح نیاز به دو بایت (۱۶ بیت) از حافظه دارد؛ گاهی اوقات مقداری که باید ذخیره شود تنها به یک یا دو بیت نیاز دارد. با داشتن تعدادی از این متغیرهای کوچک یک بیت فیلد اجازه می‌دهد تا داده‌ها کارآمدتر در حافظه ذخیره شوند.[۴]

در سی و سی‌پلاس‌پلاس، بیت فیلدهای بومی می‌توانند با 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;
};

منابع[ویرایش]

  1. Penn Brumm; Don Brumm (August 1988). 80386 Assembly Language: A Complete Tutorial and Subroutine Library. McGraw-Hill School Education Group. p. 606. ISBN 978-0-8306-9047-3.
  2. Steve Oualline (1997). Practical C Programming. "O'Reilly Media, Inc.". pp. 403–. ISBN 978-1-56592-306-5.
  3. Michael A. Miller (January 1992). The 68000 Microprocessor Family: Architecture, Programming, and Applications. Merrill. p. 323. ISBN 978-0-02-381560-7.
  4. Tibet Mimar (1991). Programming and Designing with the 68000 Family: Including 68000, 68010/12, 68020, and the 68030. Prentice Hall. p. 275. ISBN 978-0-13-731498-0.
  5. Mark E. Daggett (13 November 2013). Expert JavaScript. Apress. pp. 68–. ISBN 978-1-4302-6097-4.

֗֗֗