عملگر بیتی Bitwise Operator
عملگر بیتی یا Bitwise Operator چیست؟
عملگر بیتی (Bitwise Operator) به عملگرهایی گفته میشود که عملی را روی یک یا چند عدد باینری در سطح بیت هایشان انجام میدهند. این اعمال را عملیات بیتی (Bitwise Operation) مینامند و از آنجایی که بسیار ساده هستند توسط پردازنده به صورت مستقیم نیز پشتیبانی میشوند. عملیات بیتی معمولا برای انجام اعمالی نظیر مقایسه، محاسبه و … مورد استفاده قرار میگیرد.
عملگرهای بیتی متداول
عملگرهای بیتی رایجی که در اغلب زبان های برنامه نویسی (و نه تمامی آنها) پشتیبانی میشود شامل عملگرهای NOT (نقیض یا نفی)، AND (و)، OR (یا) و XOR (یای مانعه الجمع، یای انحصاری) بیتی و همچنین تعدادی از شیفتهای بیتی پرکاربرد میباشد.
عملگر NOT بیتی، نوعی عملگر بیتی یکانی (تک عملوندی) است که تمام بیتهای عملوند خود را تغییر میدهد. به عبارت بهتر، این عملگر، عمل نفی منطقی را روی تک تک بیتهای عملوند انجام میدهد (بیتهایی که صفر هستند را به یک و بیتهایی که یک هستند را به صفر تبدیل میکند). یکی از کاربردهای این عملگر، محاسبه مکمل یک (1’s Complement) اعداد باینری میباشد.
عملگرهای AND و OR و XOR، عملگرهای باینری (دوتایی یا دو عملوندی) هستند. عملوندهایی که توسط این عملگرها بر روی آنها عملیات بیتی انجام میشود میبایست دارای طول (تعداد بیت) یکسان باشند چرا که این اعمال روی بیتهای متناظر عملوندها انجام میشود. توجه داشته باشید در فرم متدول نمایش باینری، سمت چپترین موقعیت بیتی را با ارزش ترین (یا مهمترین) بیت (Most significant bit یا MSB) و سمت راستترین موقعیت بیتی را کم ارزش ترین (یا کم اهمیت ترین) بیت (Least significant bit یا LSB) مینامند.
عملگر AND بیتی، عمل AND (و) منطقی را روی هر جفت از بیتهای متناظر در عملوندهایش انجام میدهد. در صورتی که هر دو بیت در موقعیتهای متناظر از دو عملوند برابر با یک باشند بیت متناظر در حاصل عملگر نیز برابر با یک و در غیراینصورت برابر با صفر خواهد بود.
عملگر OR بیتی عملگری است که عمل OR (یا) منطقی را روی هر جفت از بیتهای متناظر در عملوندهایش انجام میدهد. اگر دو بیت در موقعیتهای متناظر از دو عملوند برابر با صفر باشند بیت متناظر در حاصل عملگر نیز برابر با صفر و در غیراینصورت برابر با یک خواهد بود.
عملگر XOR بیتی نیز عمل یای مانعه الجمع (یای انحصاری) منطقی را روی هر جفت از بیتهای متناظر در عملوندهایش انجام میدهد. به این معنا که اگر هر دو بیت در موقعیتهای متناظر از دو عملوند برابر با صفر یا هر دو برابر با یک باشند بیت متناظر در حاصل عملگر برابر با صفر و در غیراینصورت (یکی صفر و دیگری یک باشد) برابر با یک خواهد بود.

عملگرهای شیفت بیتی، ارقام عملوند خود را براساس نوع شیفت، به سمت چپ یا راست جابجا میکنند. از آنجایی که ثباتها در پردازنده دارای طول ثابتی هستند بنابراین در هر عمل شیفت، بیتهایی از یک سمت حذف (یا خارج) میشوند (Shift out) و بیتهایی نیز از سمت دیگر برای تکمیل موقعیت آزاد شده وارد میشوند (Shift in). به عنوان مثال در شیفت تک بیتی به سمت راست، سمت چپترین موقعیت بیتی آزاد میشود و لازم است یک بیت دیگر در این مکان قرار داده شود. تفاوت انواع مختلف عملگرهای شیفت بیتی در نحوه تعیین مقدار بیتی است که میبایست در موقعیت آزاد شده قرار گیرد.

در شیفت حسابی (Arithmetic Shift) به سمت چپ، بیتهای صفر از سمت راست به منظور تکمیل موقعیت آزاد شده وارد میشوند. اما در شیفت حسابی به سمت راست مقدار باارزشترین بیت، موقعیت آزاد را از سمت چپ تکمیل میکند. با توجه به اینکه در اعداد باینری علامتدار، با ارزشترین بیت، تعیینکننده علامت عدد میباشد بنابراین شیفت حسابی به سمت راست، علامت عدد را تغییر نمیدهد.
در شیفت منطقی (Logical Shift) برخلاف شیفت حسابی همواره بیتهای صفر جایگزین موقعیتهای آزاد شده میشود. از اینرو شیفت منطقی و حسابی به سمت چپ هردو نتیجهای یکسان خواهند داشت. یکی دیگر از انواع مهم شیفت، شیفت دایره ای (Circular Shift) نام دارد که در آن مقدار همان بیتی که هنگام شیفت به راست یا چپ خارج شده است از سمت دیگر وارد میشود به گونهای که میتوانید تصور کنید دو سر رشته بیتی همانند یک دایره به یکدیگر متصل شده است.
نمونه ای از کاربردهای این عملگرها
از عملگرهای بیتی میتوان برای حل مسائل مختلفی استفاده نمود مشروط بر اینکه با مفهوم این عملگرها و خواص اعداد باینری کاملا آشنا باشید. برای مثال به منظور تشخیص زوج یا فرد بودن یک عدد، کافیست از عملگر AND استفاده کنید. اگر حاصل عمل AND میان عدد موردنظر و عدد 1 برابر با 1 شود عدد فرد و در غیراینصورت زوج خواهد بود. دلیل صحت این گزاره اینست که سمت راستترین بیت در معادل باینری اعداد فرد همواره برابر با 1 میباشد و AND کردن این بیت با بیت 1 باعث میشود سمت راستترین بیت حاصل برابر با 1 شود و مابقی بیت ها نیز صفر خواهد بود (معادل عدد 1 دهدهی).
نمونه دیگر از کاربرد این عملگرها را میتوان در معکوس کردن تمام بیت های یک عملوند با کمک NOT مشاهده کرد؛ زمانی که هر بیت عملوند، معنای خاصی در برنامه داشته است و نیاز باشد تمام آنها را معکوس کنیم. همینطور میتوانید برای تشخیص تساوی دو عدد آنها را با یکدیگر XOR کنید؛ اگر حاصل برابر با صفر بود دو عدد با یکدیگر مساوی هستند.
پیوندهای پیشنهادی تک دیک
سلام بسیار مفید بود ممنون
سلام. ممنون خوشحالم که مفید بوده براتون.
با سلام خدمت شما آیا درست است که از این عملگرها در بیشتر در مهندسی برق استفاده میشود
سلام سعید گرامی
تا اونجایی که می دونم این اعمال در حوزه الکترونیک هم کاربرد دارند هرچند بنده اطلاع چندانی از این رشته ندارم. اما در زمینه رایانه، طراحی مدارهای منطقی و برنامه نویسی این اعمال و عملگرها کاربردهای زیادی دارند.
سلام
وقت شما بخیر
عذرخواهی میکنم کاربرد عملگر بیتی دقیقا چی هست؟ در چه مواردی ازش استفاده میشه؟
سلام،
چند نمونه از کاربردهای این عملگرها به متن واژه افزوده شد. البته استفاده از این عملگرها در کاربردهای پیچیده تر نیازمند تسلط بیشتر است. امیدوارم این نمونه ها برای شما مفید و راهگشا باشند.