حقائق مثيرة للاهتمام عن مجموعة بتات C++

مجموعة البت عبارة عن حاوية في مكتبة النماذج القياسية C++ للتعامل مع البيانات على مستوى البت. 

1. تقوم مجموعة البت بتخزين البتات (عناصر ذات قيمتين محتملتين فقط: 0 أو 1). ومع ذلك، يمكننا الحصول على جزء من السلسلة من خلال توفير المواضع لمنشئ مجموعة البتات (المواضع تتعلق بموضع السلسلة من اليسار إلى اليمين)

مثال:

C++
   // C++ program to demonstrate that we can get part of a    // bit string in bitset.   #include          #include         #include          int     main  ()   {      std  ::  string     bit_string     =     '110010'  ;      std  ::  bitset   <  8  >     b1  (  bit_string  );     // [0 0 1 1 0 0 1 0]      // string from position 2 till end      std  ::  bitset   <  8  >     b2  (  bit_string       2  );     // [0 0 0 0 0 0 1 0]      // string from position 2 till next 3 positions      std  ::  bitset   <  8  >     b3  (  bit_string       2       3  );     // [0 0 0 0 0 0 0 1]          std  ::  cout      < <     b1      < <     'n'      < <     b2      < <     'n'      < <     b3      < <     'n'  ;      return     0  ;   }      

الإخراج:

00110010 00000010 00000001 

2. يمكننا إنشاء مجموعة بت باستخدام الأحرف الموجودة في std::basic_string _str. يمكن توفير موضع البداية الاختياري _pos والطول _n بالإضافة إلى أحرف تشير إلى قيم بديلة لمجموعة (_one) وبتات غير محددة (_صفر). 

بناء الجملة:

std::bitset b1(str pos n zero one);   str   : string used to initialize the bitset   pos   : a starting offset into str   n   : number of characters to use from str   zero   : alternate character for unset bits in str   one   : alternate characters for set bits in str  
  • إذا كان _pos > str.size() فإن هذا المنشئ يرمي std::out_of_range.
  • إذا كانت أي أحرف تم فحصها في _str ليست صفرًا أو واحدًا، فسيتم طرح std::invalid_argument.
C++
   // C++ program to demonstrate that we can construct bitset using    // alternate characters for set and unset bits.    #include             #include            #include             int     main  ()      {         // string constructor using custom zero/one digits       std  ::  string     alpha_bit_string     =     'aBaaBBaB'  ;         std  ::  bitset   <  8  >     b1  (  alpha_bit_string       0       alpha_bit_string  .  size  ()         'a'       'B'  );     // [01001101]       std  ::  cout      < <     b1      < <     'n'  ;      }      

الإخراج:

01001101 

3. يقوم بإنشاء كائن من مجموعة بتات الفئة لتهيئة البتات N إلى القيم التي تتوافق مع الأحرف المتوفرة في سلسلة أحرف على النمط c مكونة من الأصفار والواحدات. يمكنك استدعاء المنشئ دون تحويل السلسلة إلى نوع سلسلة. يحتوي أيضًا على معلمتين اختياريتين _Zero و_One والتي تشير إلى الحرف الموجود في _Str الذي سيتم تفسيره على أنه يعني 0 بت و1 بت على التوالي.

C++
   #include          #include          int     main  ()      {      // char* constructor using custom digits      std  ::  bitset   <  8  >     b1  (  'XXXXYYYY'       8       'X'       'Y'  );     // [0 0 0 0 1 1 1 1]      std  ::  cout      < <     b1      < <     'n'  ;   }   

الإخراج:

00001111 

عمليات البت

1. std::bitset::to_string()  
يحول محتويات مجموعة البت إلى سلسلة. يستخدم الصفر لتمثيل البتات بقيمة false وواحد لتمثيل البتات بقيمة true. تحتوي السلسلة الناتجة على أحرف N حيث يتوافق الحرف الأول مع البتة الأخيرة (N-1) والحرف الأخير يتوافق مع البتة الأولى. كما يمكننا تمرير الأحرف المستخدمة لطباعة قيمة الصواب والخطأ من خلال المعلمات.

مثال:

C++
   // C++ program to demonstrate that we can convert contents   // of bitset to a string.   #include          #include          int     main  ()   {      std  ::  bitset   <  8  >     b  (  42  );      std  ::  cout      < <     b  .  to_string  ()      < <     'n'       < <     b  .  to_string  (  '*'  )      < <     'n'       < <     b  .  to_string  (  'O'       'X'  )      < <     'n'  ;   }   

الإخراج:

00101010 **1*1*1* OOXOXOXO 

2.stz::bitt.  
يحول محتويات مجموعة البت إلى عدد صحيح طويل غير موقّع. يتوافق البت الأول من مجموعة البت مع الرقم الأقل أهمية من الرقم ويتوافق البت الأخير مع الرقم الأكثر أهمية. تطرح الدالة std::overflow_error إذا تعذر تمثيل القيمة في ملف طويل غير موقع.

مثال:

C++
   // C++ program to demonstrate that we can get value of bitset   // as unsigned long integer.   #include          #include              int     main  ()   {      std  ::  bitset   <  5  >     b  (  5  );      std  ::  cout      < <     b  .  to_ulong  ()      < <     'n'  ;      }   

الإخراج:

5