صفحه اصلیآموزش ساده Bit mask در ++C

این تکنیک برای مدیریت و عضو کردن یکسری عناصر به مجموعه‌ است. مجموعه در اینجا با عنوان رشته بیتی یاد می‌شود که هر بیت آن نشان دهنده‌ی وضعیتِ عنصر مورد نظر می‌باشد. اگر عنصر مورد نظر در مجموعه یا رشته بیتی عضو است، آنگاه بیت متناظر آن در رشته بیتی، شامل مقدار یک است، در غیر این صورت، این بیت صفر خواهد بود.

نکته: باید برای هر عنصر مجموعه، maskای را در نظر گرفته شود.

تا اینجا دو مولفه، به نام‌های رشته بیتی که همان مجموعه‌ است و mask که مربوط به هر عنصر مجموعه است اشاره شد.

در زیر چندین عملیات بیان می‌شود که می‌توان روی مجموعه یا رشته بیتی انجام داد؛ این عملیات‌ها با کمک عملگرهای بیتی انجام می‌پذیرد:

بررسی عضو بودن عنصر مورد نظر در رشته بیتی

منظور این هست که بررسی شود بیت متناظر با عنصر، دارای مقدار یک هست یا صفر؛ اگر مقدار صفر هست یعنی عنصر عضو مجموعه نیست و اگر بیت مربوطه مقدار یک است، یعنی عنصر عضو مجموعه است(با استفاده از عملگر منطقی &).

این عملیات به صورت زیر انجام می‌پذیرد:

(رشته بیتی) & (عنصر مورد نظر)

نکته: منظور از عنصر مورد نظر، مقدار mask آن می‌باشد.

اضافه کردن عنصر به مجموعه‌ یا رشته بیتی

منظور این هست که بیت متناظر با عنصر، در مجموعه یا رشته بیتی، دارای مقدار یک گردد(با استفاده از عملگر منطقی or).

(رشته بیتی) | (عنصر مورد نظر)

حذف عنصر از رشته بیتی

منظور این هست که بیت متناظر با عنصر، در مجموعه یا رشته بیتی، دارای مقدار صفر گردد(با استفاده از عملگر منطقی or و not).

(رشته بیتی) | (عنصر مورد نظر~)

نکته: علامت not یا معکوس به صورت ~ می‌باشد.

تغییر وضعیت عضو بودن عنصر مورد نظر

منظور این است که اگر مقدار بیت متناظر با عنصر در رشته بیتی، دارای مقدار یک بود، صفر گردد یعنی عنصر، از مجموعه حذف گردد و همچنین اگر مقدار بیت متناظر با عنصر، در رشته بیتی، صفر بود دارای مقدار یک گردد، یعنی عنصر به مجموعه اضافه شود. در اصطلاح به این نوع عملیات تغییر وضعیت، toggle گفته می شود (با استفاده از عملگر منطقی xor).

(رشته بیتی) ^ (عنصر مورد نظر)

یک مثال بسیار ساده و رایج

لیستی از افراد به صورت زیر وجود دارد:

Copy to Clipboard

در این لیست، فقط ALI، REZA و SAJJAD دانشجو هستند؛ می‌خواهیم مجموعه‌ای از دانشجویان را ایجاد نماییم و عملیات‌هایی مانند بررسی عضو بودن دانشجو در مجموعه، حذف دانشجو از مجموعه، عضو کردن دانشجوی جدید به مجموعه را، انجام دهیم:

در ابتدا لازم هست که مجموعه یا همان رشته بیتی که شامل دانشجویان هست را ایجاد نماییم:

Copy to Clipboard

در ادامه برای هر عنصر (افراد)، لازم است maskی ایجاد شود:

Copy to Clipboard

نکته: به طور کلی تعداد افراد با تعداد بیت‌ها، یکسان است و دلیل این امر به خاطر متمایز کردن افراد نسبت به یکدیگر می‌باشد (می‌توان به این صورت بیان کرد: به هر فرد یک ID یا شناسه منحصر به فرد، داده شده است).

نکته: مقدار 0b0001، عدد باینری (دودیی) را نشان می‌دهد.

عملیات عضو کردن دانشجو در مجموعه

Copy to Clipboard

اکنون مقدار listOfStudents ، عدد 11 می‌باشد که به صورت دودویی یا باینری عدد 1011 است که نشان دهنده‌ی عضو بودن سه دانشجو ALI، REZA و SAJJAD در مجموعه است (یعنی بیت‌های متناظر این افراد، یک می‌باشند).

سه خط کد بالا را می توان به صورت زیر خلاصه کرد:

Copy to Clipboard

عملیات حذف کردن دانشجو

Copy to Clipboard

اکنون مقدارlistOfStudents ، عدد 9 است که به صورت دودویی 1001 می‌باشد و نشان می‌دهد که کاربر REZA از مجموعه حذف گردیده است.

سوال) برای حذف کردن دو دانشجو، چه کدی باید نوشت؟

جواب) به عنوان نمونه برای حذف دانشجوهای ALI و REZA به صورت زیر باید اقدام کرد:

Copy to Clipboard

بررسی عضو بودن دانشجو در مجموعه

Copy to Clipboard

چون در عملیات قبلی دانشجوی REZA را حذف نمودیم، مقدار isExist، صفر می‌باشد.

Copy to Clipboard

مقدار isExist، یک می‌باشد و نشان از عضو بودن SAJJAD در مجموعه دانشجویان است.

نکته: در کتابخانه‌های استاندارد ++C ، کتابخانه‌ای با نام bitset برای تسهیل مدیریت و کار با تکنیک mask، وجود دارد.

کد مثال بالا
Copy to Clipboard

نمایش خروجی کد
خروجی کد برای مثال Bit mask

به اشتراک بگذارید.

بیشتر بخوانیم

مقالات مرتبط

1400-4-27 11:46:33 +00:00