Bitset הוא מכיל בספריית תבניות סטנדרטית של 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) ובלתי מוגדרות (_0).
תַחבִּיר:
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++ 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 bit ו-1 bit בהתאמה.
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
פעולות Bitset
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 אם לא ניתן לייצג את הערך ב-unsigned long.
דוּגמָה:
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