آموزش قدم به قدم جاوا – قسمت چهارم – بخش دوم

در بخش آخر از قسمت چهارم به عملگرهای انتساب و عملگرهای بیتی خواهیم پرداخت و همچنین با مبحث مهمی به نام اولویت عملگرها آشنا خواهیم شد.

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

عملگرهای انتساب وظیفه ساده ای دارند: نسبت‌دادن یک مقدار به یک متغیر. عملگر = که از آن برای نسبت‌دادن یک مقدار به یک متغیر استفاده می‌کردیم یکی از عملگر‌های انتساب است.

جدول زیر عملگرهای انتساب را نشان می‌دهد:

مثال

عملگر

a = 13;

=

a += 2;

(a = a + 2)

+=

a -= 5;

(a = a – 5)

-=

a *= 3;

(a = a * 3)

*=

a /= 2;

(a = a / 2)

/=

a %= 2;

(a = a % 2)

%=

همانطور که دیدید تاکنون از اولین عملگر انتساب بارها برای نسبت‌دادن یک مقدار به یک متغیر استفاده کرده‌ایم. به عملگرهای بعدی عملگرهای انتساب کوتاه (Short-hand Assignment) گفته می‌شود که می‌توانید عبارت معادل آن را در پرانتز زیر آن ببینید. برای انجام اعمال ریاضی روی یک متغیر و قرار دادن نتیجه در همان متغیر می‌توان از عملگرهای انتساب کوتاه استفاده کرد که باعث خلاصه‌تر شدن کد می‌شوند. در کد زیر نحوه استفاده از این عملگرها نشان داده شده است:

شکل دیگر عبارات انتساب در کد بالا در کامنت روبروی آن نوشته شده است.

عملگرهای بیتی

توجه: عملگرهای بیتی در جاوا نسبت به عملگرهایی که تاکنون آموختیم به‌ندرت و در بعضی موارد خاص استفاده می‌شوند بنابراین می‌توانید از خواندن این قسمت صرف‌نظر کنید. ما هم به توضیح مختصری از آن بسنده کردیم.

از عملگرهای بیتی برای کار روی بیت‌های تشکیل‌دهنده‌ی یک مقدار استفاده می‌شود (برای فهم این قسمت باید با سیستم عددی باینری آشنایی داشته باشید.). عملوندهای این عملگرها تنها می‌تواند از یکی از نوع داده‌های long, int, short, char, byte باشد.

در جدول زیر عملگرهای بیتی را مشاهده می‌کنید:

AND

&

OR

|

XOR

^

NOT

~

شیفت به چپ

<<

شیفت به راست

>>

شیفت به راست (نوع دوم)

>>>

AND, OR, XOR, NOT

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

در متغیر result نتیجه عملیات & بیتی روی دو عدد 12 و 7 قرار داده شده و سپس چاپ می‌شود. اگر برنامه را اجرا کنید می‌بینید که عدد 4 در کنسول چاپ خواهد شد اما چرا؟

عملگر & بیتی دو عملوند خود را که هر دو عدد هستند را به 0 و 1 تبدیل می‌کند (همان عدد اما در مبنای دو نه مبنای ده). عدد 12 در مبنای دو برابر با 1100 است و عدد 7 در مبنای دو برابر با 0111 می‌باشد. سپس عملگر & بیتی تک تک بیت‌ها را با هم مقایسه کرده و یک عدد باینری جدید بر اساس این مقایسه تولید خواهد کرد.

به شکل زیر دقت کنید:

jbitand

عدد 0 را false و عدد 1 را true در نظر بگیرید. همانطور که می‌دانید عملگر AND تنها وقتی نتیجه true می‌دهد که هر دو عملگر آن true باشند. در نتیجه می‌توان گفت: عملگر & بیتی تنها وقتی 1 برمی‌گرداند که هر دو بیت مقایسه‌شونده 1 باشند، دقیقا مثل شکل بالا. همانطور که حدس زدید نتیجه این عملیات که عدد 0100 است در مبنای ده برابر با 4 خواهد بود یعنی همان عددی که در کنسول برای ما چاپ شده است.

عملکرد بقیه عملگرهای منطقی بیتی هم شبیه عملگر & بیتی است البته غیر از عملگر NOT بیتی که تنها یک عملوند دارد و بیت‌های عملوند خود را معکوس می‌کند.

عملگرهای شیفت‌دهنده بیتی

از عملگرهای شیفت‌دهنده برای حرکت‌دادن بیت‌ها به مقدار مورد نظر به سمت چپ یا راست استفاده می‌شود.

به کد زیر دقت کنید:

ابتدا عدد 1 در متغیر x قرار گرفته است. طبیعتا عدد 1 وقتی به باینری تبدیل شود همان 1 خواهد شد. سپس بیت‌های عدد 1 را به اندازه یک واحد به سمت چپ منتقل کردیم که در نتیجه 1 تبدیل به 10 می‌شود و 10 همان عدد 2 (در مبنای ده) است که در کنسول برای ما چاپ می‌شود.

عملگرهای یگانی (Unary Operators)

عملگرهای یگانی جزو تقسیم بندی های اصلی عملگرها در جاوا حساب نمی‌شوند. منظور از عملگر یگانی عملگری است که تنها روی یک عملوند کار می‌کند. با بعضی از عملگرهای یگانی قبلا آشنا شدیم. در جدول زیر تمام عملگرهای یگانی در جاوا را مشاهده می‌کنید:

افزایش یک واحدی

++

کاهش یک واحدی

مثبت ساز عدد

+

منفی ساز عدد

NOT منطقی

!

NOT بیتی

~

از این جدول فقط مثبت‌ساز و منفی‌ساز برای ما تازگی دارد. این عملگرها برای مشخص‌کردن مثبت یا منفی‌بودن یک لیترال عددی به کار می‌روند (قبلا گفتیم که در جاوا به مقادیر ثابت لیترال می‌گویند.). البته استفاده از مثبت‌ساز لازم نیست چون عددی که علامت منفی نداشته باشد به‌طور پیشفرض مثبت در نظر گرفته می‌شوند. مثلا در عبارت زیر عدد منفی 10 را به متغیر a نسبت دادیم:

اولویت عملگرها (Operator Precedence)

عملگرها در جاوا هم مانند عملگرها در ریاضیات هر کدام اولویت خاص خود را دارند.

تصویر زیر را در قسمت عملگرهای منطقی دیدید:

jop2

چرا ابتدا دو عبارت x > 5 و x > y ارزیابی شده و سپس عملگر && ارزیابی می‌شود؟ چون عملگرهای > و < اولویت بالاتری نسبت به عملگر && دارند و ابتدا این دو عملگر کار خود را انجام می‌دهند و بعد از آن عملگر && نتیجه‌های تولید شده را ارزیابی می‌کند. پس اولویت عملگرها فاکتور بسیار مهمی است که هنگام نوشتن عبارت‌های این‌چنینی باید به آن توجه داشته باشیم.

در جدول زیر عملگرها به ترتیب اولویت از بالا به پایین مشخص شده‌اند:

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

++ – – ! ~

ضرب و تقسیم و باقی‌مانده

* / %
جمع و تفریق + –
شیفت دهنده های بیتی >> >>> <<
عملگرهای نسبی > >= < <=
مساوی و نامساوی == !=
AND بیتی &
XOR ^
OR بیتی |
AND منطقی &&
OR منطقی ||
انتساب = += -= *= /= %=

نکته: عبارات داخل پرانتز همواره از اولویت بالاتری برخوردارند و در یک عبارت ابتدا آن‌هایی که داخل پرانتز هستند ارزیابی می‌شوند.

نکته مهم: اگر عبارتی چند عملگر با اولویت‌های یکسان باشند آنگاه عملگرهای با اولویت یکسان به ترتیب از چپ به راست ارزیابی خواهند شد.

مصطفی نصیری

دانشجوی نرم افزار هستم و علاقه شدیدی به برنامه نویسی مخصوصا با زبان جاوا دارم! در حال حاضر تمرکزم روی اندرویده. دوست دارم چیزایی که یاد میگیرم رو با بقیه به اشتراک بگذارم :)

همچنین ممکن است دوست داشته باشید ...

۳ واکنش

  1. Eve گفت:

    kheyli matalebeon kamel va mofide kheyliam komakam kard mamnon!

  2. آریا گفت:

    سلام و عرض ادب
    آقا بشدددددت دارم از مطالب مفیدی که به زبان ساده نوشتید لذت می برم و استفاده می کنم… امید وارم بزودی این مطالب را بصورت کتاب منتشر کنید

  3. zrdt گفت:

    واقعا عاااالی، روان و کامل گفته شده مممنووون.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *