فهرست عناوین
آموزش ساده Bit Mask در ++C
فهرست عناوین
این تکنیک برای مدیریت و عضو کردن یکسری عناصر به مجموعه است. مجموعه در اینجا با عنوان رشته بیتی یاد میشود که هر بیت آن نشان دهندهی وضعیتِ عنصر مورد نظر میباشد. اگر عنصر مورد نظر در مجموعه یا رشته بیتی عضو است، آنگاه بیت متناظر آن در رشته بیتی، شامل مقدار یک است، در غیر این صورت، این بیت صفر خواهد بود.
نکته: باید برای هر عنصر مجموعه، maskای را در نظر گرفته شود.
تا اینجا دو مولفه، به نامهای رشته بیتی که همان مجموعه است و mask که مربوط به هر عنصر مجموعه است اشاره شد.
در زیر چندین عملیات بیان میشود که میتوان روی مجموعه یا رشته بیتی انجام داد؛ این عملیاتها با کمک عملگرهای بیتی انجام میپذیرد:
منظور این هست که بررسی شود بیت متناظر با عنصر، دارای مقدار یک هست یا صفر؛ اگر مقدار صفر هست یعنی عنصر عضو مجموعه نیست و اگر بیت مربوطه مقدار یک است، یعنی عنصر عضو مجموعه است(با استفاده از عملگر منطقی &).
این عملیات به صورت زیر انجام میپذیرد:
(رشته بیتی) & (عنصر مورد نظر)
نکته: منظور از عنصر مورد نظر، مقدار mask آن میباشد.
اضافه کردن عنصر به مجموعه یا رشته بیتی
منظور این هست که بیت متناظر با عنصر، در مجموعه یا رشته بیتی، دارای مقدار یک گردد(با استفاده از عملگر منطقی or).
(رشته بیتی) | (عنصر مورد نظر)
حذف عنصر از رشته بیتی
منظور این هست که بیت متناظر با عنصر، در مجموعه یا رشته بیتی، دارای مقدار صفر گردد(با استفاده از عملگر منطقی or و not).
(رشته بیتی) | (عنصر مورد نظر~)
نکته: علامت not یا معکوس به صورت ~ میباشد.
تغییر وضعیت عضو بودن عنصر مورد نظر
منظور این است که اگر مقدار بیت متناظر با عنصر در رشته بیتی، دارای مقدار یک بود، صفر گردد یعنی عنصر، از مجموعه حذف گردد و همچنین اگر مقدار بیت متناظر با عنصر، در رشته بیتی، صفر بود دارای مقدار یک گردد، یعنی عنصر به مجموعه اضافه شود. در اصطلاح به این نوع عملیات تغییر وضعیت، toggle گفته می شود (با استفاده از عملگر منطقی xor).
(رشته بیتی) ^ (عنصر مورد نظر)
یک مثال بسیار ساده و رایج
لیستی از افراد به صورت زیر وجود دارد:
در این لیست، فقط ALI، REZA و SAJJAD دانشجو هستند؛ میخواهیم مجموعهای از دانشجویان را ایجاد نماییم و عملیاتهایی مانند بررسی عضو بودن دانشجو در مجموعه، حذف دانشجو از مجموعه، عضو کردن دانشجوی جدید به مجموعه را، انجام دهیم:
در ابتدا لازم هست که مجموعه یا همان رشته بیتی که شامل دانشجویان هست را ایجاد نماییم:
در ادامه برای هر عنصر (افراد)، لازم است maskی ایجاد شود:
نکته: به طور کلی تعداد افراد با تعداد بیتها، یکسان است و دلیل این امر به خاطر متمایز کردن افراد نسبت به یکدیگر میباشد (میتوان به این صورت بیان کرد: به هر فرد یک ID یا شناسه منحصر به فرد، داده شده است).
نکته: مقدار 0b0001، عدد باینری (دودیی) را نشان میدهد.
عملیات عضو کردن دانشجو در مجموعه
اکنون مقدار listOfStudents ، عدد 11 میباشد که به صورت دودویی یا باینری عدد 1011 است که نشان دهندهی عضو بودن سه دانشجو ALI، REZA و SAJJAD در مجموعه است (یعنی بیتهای متناظر این افراد، یک میباشند).
سه خط کد بالا را می توان به صورت زیر خلاصه کرد:
عملیات حذف کردن دانشجو
اکنون مقدارlistOfStudents ، عدد 9 است که به صورت دودویی 1001 میباشد و نشان میدهد که کاربر REZA از مجموعه حذف گردیده است.
سوال) برای حذف کردن دو دانشجو، چه کدی باید نوشت؟
جواب) به عنوان نمونه برای حذف دانشجوهای ALI و REZA به صورت زیر باید اقدام کرد:
بررسی عضو بودن دانشجو در مجموعه
چون در عملیات قبلی دانشجوی REZA را حذف نمودیم، مقدار isExist، صفر میباشد.
مقدار isExist، یک میباشد و نشان از عضو بودن SAJJAD در مجموعه دانشجویان است.
نکته: در کتابخانههای استاندارد ++C ، کتابخانهای با نام bitset برای تسهیل مدیریت و کار با تکنیک mask، وجود دارد.
ثبت ديدگاه