بایگانی برچسب‌ها : Arithmetic Shift

عملگر بیتی 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 بیتی نیز عمل یای مانعه الجمع (یای انحصاری) منطقی را روی هر جفت از بیت‌های متناظر در عملوندهایش انجام می‌دهد. به این معنا که اگر هر دو بیت در موقعیت‌های متناظر از دو عملوند برابر با صفر یا هر دو برابر با یک باشند بیت متناظر در حاصل عملگر برابر با صفر و در غیراینصورت (یکی صفر و دیگری یک باشد) برابر با یک خواهد بود.

عملگر بیتی Bitwise Operator
نمونه‌ای از انجام چهار عملیات بیتی. در این تصویر، حاصل عملگرهای بیتی NOT و AND و OR و XOR را روی عملوندهای مشخص شده مشاهده می‌کنید.

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

عملگر بیتی شیفت Bit Shift
مقایسه انواع شیفت بیتی روی عدد باینری 00010111 – شیفت‌ها نوعی عملگر بیتی به شمار می‌روند که ارقام عملوند خود را براساس نوع شیفت، به سمت چپ یا راست جابجا می‌کنند.

در شیفت حسابی (Arithmetic Shift) به سمت چپ، بیت‌های صفر از سمت راست به منظور تکمیل موقعیت آزاد شده وارد می‌شوند. اما در شیفت حسابی به سمت راست مقدار باارزش‌ترین بیت، موقعیت آزاد را از سمت چپ تکمیل می‌کند. با توجه به اینکه در اعداد باینری علامت‌دار، با ارزش‌ترین بیت، تعیین‌کننده علامت عدد می‌باشد بنابراین شیفت حسابی به سمت راست، علامت عدد را تغییر نمی‌دهد.

در شیفت منطقی (Logical Shift) برخلاف شیفت حسابی همواره بیت‌های صفر جایگزین موقعیت‌های آزاد شده می‌شود. از اینرو شیفت منطقی و حسابی به سمت چپ هردو نتیجه‌ای یکسان خواهند داشت. یکی دیگر از انواع مهم شیفت، شیفت دایره ای (Circular Shift) نام دارد که در آن مقدار همان بیتی که هنگام شیفت به راست یا چپ خارج شده است از سمت دیگر وارد می‌شود به گونه‌ای که می‌توانید تصور کنید دو سر رشته بیتی همانند یک دایره به یکدیگر متصل شده است.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا