درس پنجم
عملگرهای دستکاری بیتها در زبان C
ازآنجايي كه زبان C طوري طراحي شده است كه بتواند دربسياري ازموارد جايگزين زبان اسمبلي گردد. بايد قادر باشد كليه اعمال ( يا حداقل بسياري از اعمال ) كه در زبان اسمبلي قابل انجام هستند را انجام دهد . يكي از اعمالي كه در زبان اسمبلي براحتي انجام پذير است . انجام اعمالي بر روي بيت هاي يك بايت يا يك كلمه از حافظه است كه در زبان C براي انجام اين منظور از عملگرهايي استفاده مي شود كه به عملگرهاي بيتي معروفند. اين عملگرها انجام اعمال تست ، مقدار دادن و يا انتقال (shift) بيت ها را در يك بايت يا كلمه حافظه امكان پذير مي نمايند. عملگرهاي بيتي فقط بر روي متغيرهايي از نوع charيا int عمل مي كنند و بر روي متغيرهايي از نوع float، double،، long double،، void، و يا ساير متغيرها قابل اجرا نيستند . عملگرهاي بيتي & و | و ~ و (AND، OR، NOT) مشابه عملگرهاي منطقي AND، ORو NOT عمل مي كنند با اين تفاوت كه عمل آنها بر روي يك بيت است . با فرض اين كه p و q دو بيت مختلف باشند ، نحوه عمل عملگر ^ را در ذيل مشاهده مي نماييد .
مقدار P------مقدار Q-------مقدار P^Q
۰----------------۰----------------۰
۱----------------۰----------------۱
۰----------------۱----------------۱
۱----------------۱----------------۰
نکته مهم: هر بیت در حافظه فقط می تواند مقدار ۰ یا ۱ را داشته باشد.
همان طور كه مشاهده شد ، نتيجه عملگر بيتي ^ وقتي يك (1) است كه يكي از عملوندهاي آن صفر و ديگري يك باشد . به عبارت ديگر ، نتيجه عملگر بيتي ^ وقتي صفر است كه هر دو عملوند آن صفر و يا هر دو يك باشند .مشخصات عملگرهای بیتی در جدول زیر مشخص شده است.
عملگر-----------عنوان---نوع عملیات
&--------------AND-----------------و
|---------------OR-----------------یا
^---------------XOR---------------یا انحصاری
~---------------NOT---------------نقیض
<<-------------SHIFTRIGHT------ انتقال به سمت راست
>>-------------SHIFT LEFT-------اتنقال به سمت چپ
عملگرهاي & و | و ^ و << و >> بر روي دو عملوند عمل مي كنند اما عملگرهاي ~ و >> و << بر روي يك عملوند عمل مي كنند .
عملگرهاي >> و << به صورت ذيل به كار مي روند:
متغير >> تعداد انتقال
متغير << تعداد انتقال
در روش كلي فوق ، متغير ، يك بايت يا كلمه اي از حافظه است كه عملگرهاي بايد بر روي آن عمل كنند . تعداد انتقال عددي است كه مشخص مي كند بيت هاي متغير بايد چند محل به سمت راست و يا چپ انتقال يابند . هر انتقال به چپ ، معادل با تقسيم كردن مقدار متغير به 2 و هر انتقال به راست ، معادل ضرب كردن در 2 است . جدول زیر روش استفاده از این دو عملگر و نتایج استفاده از آنها را مشخص می نماید.
عملگر ~ در يك بايت يا كلمه حافظه ( يك متغير ) كليه بيت ها را نقيض ميكند. يعني بيت صفر را به بيت يك و بيت يك را به بيت صفر تبديل مي نمايد . لذا اگر اين عملگر دو بار بر روي يك متغير عمل كند وضعيت بيت هاي متغير به حالت اول برمي گردند .
نکته مهم: اين عملگرها معمولا" در مبدل هاي دستگاهها (device drivers) مورد استفاده قرار مي گيرند . مثل برنامه هايي كه براي كار با modem و با چاپگر نوشته مي شوند . زيرا در اين گونه موارد معمولا" تست كردن بيت هاي يك متغير مد نظر خواهد بود .
Bookmarks