بایگانی برچسب‌ها : عملگر بیتی

عملگر بیتی 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) نام دارد که در آن مقدار همان بیتی که هنگام شیفت به راست یا چپ خارج شده است از سمت دیگر وارد می‌شود به گونه‌ای که می‌توانید تصور کنید دو سر رشته بیتی همانند یک دایره به یکدیگر متصل شده است.

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

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

عملگر Operator

عملگر یا Operator چیست؟

عملگر (Operator) در برنامه‌نویسی به ساختاری گفته می‌شود که رفتاری مشابه با تابع دارد اما از نظر سازمان گرامری با آن متفاوت می‌باشد. شاید بتوان از نظر معنایی عملگرها را گونه‌ای از توابع دانست که نحوه قرارگیری پارامترهای آن‌ها (که به عملوند یا Operand موسومند) با حالت رایج توابع (که در اغلب زبان‌های برنامه‌نویسی داخل پرانتز قرار می‌گیرند) متفاوت است.

از سوی دیگر در اکثر زبان‌های برنامه نویسی، اجازه تعریف توابع به برنامه نویس داده می‌شود اما ممکن است تنها استفاده از عملگرهای از پیش تعریف شده در کدنویسی مجاز باشد. به علاوه تعداد عملوندها برخلاف تعداد پارامترهای توابع محدود هستند. اغلب عملگرها در زبان‌های برنامه‌نویسی تنها یک یا دو عملوند دارند و تعداد اندکی از عملگرها از تعداد بیشتری عملوند برخوردار هستند (به عنوان مثال عملگر ?: در زبان C یک عملگر سه عملوندی به شمار می‌رود). با وجود این تفاوت‌ها می‌توان بسیاری از عملگرها نظیر عملگر باقی‌مانده‌ی تقسیم یک عدد بر عددی دیگر را با یک تابع دو پارامتری که چنین عملی را انجام می‌دهد معادل دانست.

Operator ها معمولا با استفاده از یک نماد نمایش داده می‌شوند اما استفاده از نام‌هایی همچون div یا AND و Is نیز در زبان‌های امروزی به عنوان Operator مشاهده می‌شود. عملگرهایی که دارای یک، دو یا سه عملوند هستند را به ترتیب عملگرهای یکانی (Unary Operator)، عملگرهای باینری یا دودویی (Binary Operator) و عملگرهای تِرنِری یا سه‌تایی (Ternary Operator) می‌نامند.

محل قرارگیری عملگر در مقایسه با عملوندها می‌تواند مبتنی بر یکی از حالات پیشوندی، میانوندی و یا پسوندی باشد. به عبارت بهتر ممکن است عملگر پیش از عملوند، مابین عملوندها یا پس از عملوند قرار بگیرد. به عنوان مثال عملگرهای یکانی می‌توانند همانند عملگر منفی (-x) به صورت پیشوندی یا مانند عملگر پساافزایش (x++) به صورت پسوندی ظاهر شوند. عملگرهای دودویی همانند جمع نیز به صورت میانوندی (x + y) ظاهر می‌شوند.

علاوه بر اینکه در برخی زبان‌های برنامه‌نویسی امکان تعریف Operator جدید نیز وجود دارد، در برخی از زبان‌ها می‌توان یک Operator را برای نوع داده‌های تعریف شده توسط کاربر هم  سربارگذاری نمود (سربارگذاری عملگر یا Operator Overloading).

انواع رایج عملگرها

از رایج‌ترین انواع عملگرها در زبان‌های برنامه‌نویسی می‌توان به موارد زیر اشاره نمود (نمادهایی که برای برخی از Operator ها در داخل پرانتز ذکر شده است به همین شکل در بسیاری از زبان‌های برنامه‌نویسی مورد استفاده قرار می‌گیرد):

  • عملگرهای حسابی (Arithmetic Operator) نظیر جمع (+)، تفریق (-)، ضرب (*)، تقسیم (/)، باقیمانده (%)، افزایش (دو علامت +) و کاهش (دو علامت -)
  • عملگرهای رابطه‌ای (Relational Operator) یا مقایسه‌ای (Comparison Operator) نظیر <، >، <=، >=، == و !=
  • عملگرهای منطقی (Logical Operator) نظیر “و منطقی” (&&)، “یای منطقی” (||) و نقیض (Not یا !)
  • عملگرهای انتساب (Assignment Operator) نظیر انتساب ساده (= یا :=انتساب افزوده یا مرکب (مانند += و -= و …)
  • عملگرهای بیتی (Bitwise Operator) نظیر AND و OR و XOR، شیفت به راست، شیفت به چپ و …
  • عملگر دسترسی به فیلد در یک رکورد یا آبجکت که در بسیاری از زبان‌ها از نماد نقطه برای آن استفاده می‌شود
  • عملگر الحاق دو رشته
  • و …

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

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