Latest web development tutorials

حقول بت C

إذا كان هيكل البرنامج يحتوي على أكثر من واحد المتغيرات فقط صواب / خطأ الرقمية، على النحو التالي:

struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status;

يتطلب هذا التكوين 8 بايت من مساحة الذاكرة، ولكن في الواقع، في كل متغير، نقوم بتخزين فقط 0 أو 1. في هذه الحالة، توفر C لغة الاستخدام الأفضل للمساحة الذاكرة في الطريق. إذا كنت تستخدم هذا المتغير داخل الهيكل، يمكنك تحديد عرض المتغير لنقول للمترجم الذي ستستخدمه فقط تلك بايت. على سبيل المثال، وهيكل أعلاه يمكن كتابتها على النحو التالي:

struct
{
  unsigned int widthValidated : 1;
  unsigned int heightValidated : 1;
} status;

الآن، وهيكل أعلاه، متغير الحالة يحتل أربعة بايت من الذاكرة، ولكنها تستخدم اثنين فقط لتخزين القيم. إذا كنت تستخدم 32 المتغيرات، كل عرض متغير واحد، ثم الهيكل الوضع سوف تستخدم 4 بايت، ولكن أكثر ما دمت استخدام متغير، إذا كنت تستخدم 33 المتغيرات، وسوف تكون تحت قسم من الذاكرة المخصصة يتم تخزين المتغيرات 33 الأولى، وهذه المرة للبدء في استخدام 8 بايت. دعونا ننظر في الأمثلة التالية لفهم هذا المفهوم:

#include <stdio.h>
#include <string.h>

/* 定义简单的结构 */
struct
{
  unsigned int widthValidated;
  unsigned int heightValidated;
} status1;

/* 定义位域结构 */
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;
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

إعلان حقل بت

في حقل بت إعلان هيكل هو كما يلي:

struct
{
  type [member_name] : width ;
};

وفيما يلي وصفا للعنصر متغير حقل بت:

元素描述
type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。
member_name位域的名称。
width位域中位的数量。宽度必须小于或等于指定类型的位宽度。

المتغيرات مع عرض محدد مسبقايسمى حقل بت.حقول بت يمكن تخزين أكثر من رقم واحد، على سبيل المثال، في حاجة الى متغير لتخزين قيمة 0-7، يمكنك تحديد عرض ثلاثة حقول بت على النحو التالي:

struct
{
  unsigned int age : 3;
} Age;

تعريف الهيكل فوق مترجم الاتجاهات C، وعمر لا تستخدم سوى ثلاثة متغيرات لتخزين هذه القيمة، إذا حاولت استخدام أكثر من ثلاثة، لا يمكنك كاملة. دعونا ننظر في الأمثلة التالية:

#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