آموزش جاوا، فصل هفتم: عملگرها و اولویت‌ها در زبان جاوا

۱- عبارت‌ها (expression): تاکنون قطعاً عبارت‌های ریاضی فراوانی را دیده‌اید. برای مثال می‌دانید که ۲+۲ یک عبارت ریاضی است. در زبان‌های برنامه نویسی هم چنین عبارت‌هایی وجود دارند. اگر بخواهیم دقیق‌تر باشیم باید بگوییم که هر جمله‌ای که دارای یک «ارزش» باشد، یک «عبارت» یا expression است که البته همانطور که حدس زده‌اید یکی از رایج‌ترین انواع عبارت‌ها، عبارت‌های ریاضی است. چندین عبارت ریاضی:

int x = 5;
int y = x;
int z = x * y;

همه جملات بالا «عبارت» هستند زیرا هر کدام آن‌ها دارای یک مقدار است: در خط اول مقدار متغیر لفظی ۵ به متغیری از نوع int به نام x نسبت داده می‌شود، در خط دوم مقدار متغیر x در متغیری به نام y قرار داده می‌شود و در خط سوم مقدار حاصل ضرب دو متغیر x و y در متغیر z قرار می‌گیرد. بنابراین ۵، x و x * y هر کدام یک عبارت ریاضی هستند.

مقدار یک عبارت، مقدار بازگشتی (return value) نامیده می‌شود. برای مثال اگر x متغیری از نوع int و دارای مقدار اولیه ۳ و y نیز متغیری از نوع int و دارای مقدار اولیه ۵ باشد، آنگاه مقدار بازگشتی عبارت x * y برابر با حاصل ضرب دو عدد ۳ و ۵ یعنی ۱۵ است. به مثال زیر دقت کنید:

int x = 3;
int y = 5;
int z = x * y;
// If you print value of z,
// you will see that the value is: 15 (= 3 * 5)
System.out.println( "z value:" + z );

همانطور که می‌دانید در اغلب عبارت‌های ریاضی ما از نمادهایی مانند * (ضرب)، + (جمع) و مانند آن استفاده می‌کنیم. در اصطلاح برنامه نویسی به این نمادهای ویژه، عملگر (Operator) می‌گویند. عملگرها نمادهایی هستند که برای محاسبات ریاضی و منطقی (logical) از آن‌ها استفاده می‌شود. در بخش‌های بعدی این فصل درباره انواع مختلف اپراتورها بیشتر خواهیم گفت.

۲- عملگرهای ریاضی (Arithmetic Operators): برای انجام محاسبات ریاضی در جاوا (java) از پنج عملگر جمع (+)، تفریق (-)، ضرب (*)، تقسیم (/) و باقیمانده تقسیم (%) استفاده می‌کنیم. در جدول زیر فهرست این عملگرها را به همراه مثال‌هایی از کاربرد آن‌ها خواهید دید:

نام عملگر معنی مثال مقدار بازگشتی عبارت مثال
+ حاصل جمع ۵ + ۷ ۱۲
حاصل تفریق ۹ – ۳ ۶
منفی
* حاصل ضرب ۳
* ۵
۱۵
/ حاصل تقسیم ۱۵ / ۳ ۵
% باقیمانده تقسیم ۸ %
۳
۲

عملگرهای ریاضی را می‌توان به شیوه‌های متفاوت دسته‌بندی کرد. یکی از انواع رایج دسته‌بندی عملگر، دسته‌بندی عملگرها بر مبنای تعداد عملوند (operand) های آن‌ها است. برای مثال چهار عمل اصلی ریاضی هر کدام دارای دو عملوند هستند. در مثال جدول فوق، ۵ و ۷ عملوندهای عبارت ۵ + ۷ هستند. بیشتر عملگرهای جاوا از نوع یک یا دو عملوندی هستند و فقط یک عملگر سه عملوندی در جاوا وجود دارد که در همین فصل به آن نیز اشاره می‌کنیم.

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

int x = 16;
int y = 5;
int z = x / y;
System.out.println( "z is: " + z ); // z = 3.2 ?

اگر با ماشین حساب تقسیم فوق را انجام دهید، حاصل تفریق ۳٫۲ نشان داده می‌شود در حالی که اگر برنامه فوق را اجرا کنید، مقدار ۳ را در خروجی خواهید دید. علت آن هم واضح است، متغیر z از نوع int تعریف شده است و نمی‌تواند یک مقدار اعشاری را ذخیره کند. حال در برنامه فوق تغییری می‌دهیم و آن را به صورت زیر بازنویسی می‌کنیم:

int x = 16;
int y = 5;
float z = x / y;
System.out.println( "z is: " + z ); // z = 3.2 ?

حالا فکر می‌کنید چه مقداری در خروجی چاپ خواهد شد؟ ۳٫۲ یا ۳؟ امتحان کنید! بله بعد از اجرای برنامه فوق ۳٫۰ را خواهید دید! اما چرا؟ این بار که متغیر z از نوع float تعریف شده بود؟ در توضیح این مطلب باید گفت که به علت این که هر دو عملوند عملگر تقسیم از نوع int هستند، کامپایلر جاوا حاصل تقسیم را در یک متغیر از نوع صحیح قرار داده و سپس آن را در متغیر z قرار می‌دهد. برای رفع این مشکل می‌توان از دو راه حل استفاده کرد: تعریف عملوندهای عملگر تقسیم از نوع اعشاری (float یا double) یا مجبور کردن کامپایلر به انجام عمل تقسیم اعشاری. راه حل اول را با هم می‌بینیم:

float x = 16.0f;
float y = 5.0f;
float z = x / y;
System.out.println( "z is: " + z ); // z = 3.2 !

پس از اجرای برنامه فوق، حاصل تقسیم ۳٫۲ خواهد بود. در این روش به دلیل این که هر دو عملوند عملگر تقسیم از نوع اعشاری (float) هستند، حاصل تقسیم هم یک عدد اعشاری است. اما اگر بخواهیم دو عدد صحیح را بر هم تقسیم نموده و حاصل تقسیم را به صورت اعشاری ببینیم چه باید کرد؟ برای چنین مواردی از روش دوم استفاده می‌کنیم. در این روش که به «تغییر نوع» یا «Type casting» معروف است، یکی از عملوندهای عملگر تقسیم را به نوع اعشاری «تغییر نوع» داده یا اصطلاحاً آن را cast می‌کنیم. به مثال زیر دقت کنید:

int x = 16;
int y = 5;
float z = (float)x / y;
System.out.println( "z is: " + z ); // z = 3.2 !

در خط سوم این مثال قبل از انجام عمل تقسیم متغیر x را تغییر نوع داده و آن را به یک متغیر float تبدیل می‌کنیم. بعد از این تبدیل، عملگر تقسیم، به خاطر این که یکی از عملوندهای آن از نوع اعشاری است، به عملگر تقسیم اعشاری تبدیل می‌شود و حاصل تقسیم یک عدد اعشاری (float) می‌شود.

۳- عملگر انتساب (=): معمولاً همه با عملگر انتساب (Assignment Operator) آشنایی داریم. کار اصلی این عملگر نسبت دادن مقدار عبارت سمت راست (عملوند راست) به متغیر (عملوند) سمت چپ خود است. با توجه به تعریف بالا عملیات نسبت دادن یک مقدار به یک متغیر خود یک عبارت ریاضی است زیرا دارای مقدار است. همین خاصیت باعث می‌شود که بتوانیم چندین عملگر انتساب را زنجیروار به هم متصل نموده و چندین عبارت را در یک عبارت ساده‌تر نوشت. به مثال زیر دقت کنید:

int x = y = z = 10;

با توجه به خاصیت عملگر انتساب، عبارت فوق در زبان جاوا معتبر بوده و معنای آن این است که هر سه متغیر x و y و z دارای مقدار اولیه ۱۰ هستند. عبارت بالا معادل عبارت‌های زیر است:

int x;
int y;
int z = 10;
y = z; // y = 10
x = y; // x = 10

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

int x = 5;
x = x + 10; // x = 5 + 10

در خط دوم مثال بالا، ابتدا عبارت x + 10 تعیین مقدار می‌شود. از آنجایی که مقدار اولیه x برابر ۵ است، حاصل عبارت فوق برابر ۵ + ۱۰ یا ۱۵ است. سپس این مقدار در متغیر x قرار می‌گیرد. پس از آن مقدار متغیر x برابر ۱۵ است. تغییر دادن مقدار یک متغیر با استفاده از مقدار فعلی متغیر فرایند بسیار متداولی در برنامه نویسی جاوا است. به همین منظور و برای سادگی عملیات و خوانایی بیشتر کد، چندین عملگر انتساب جدید در زبان جاوا وجود دارند که در جدول زیر به همراه مثال آمده‌اند:

عملگر مثال معادل
+= x += y x = x + y
-= x -= y x = x

y
*= x *= y x = x * y
/= x /= y x = x / y

نکته: در هنگام استفاده از عملگرهای انتساب میانبر فوق، همواره باید دقت کنید. در صورتی که عبارت سمت راست پیچیده باشد، ممکن است خطاهای ناخواسته‌ای در عبارت‌های محاسباتی شما پدید آید که پیدا کردن و رفع آن‌ها معمولاً ساده نیست. به مثال زیر دقت کنید:

int x = 20;
int y = 5;
// ...
x = x / y + 5;
x /= y + 5;
// ...

آیا گمان می‌کنید دو عبارت بالا برابر هستند؟ در عبارت بالایی ابتدا حاصل x / y محاسبه شده و سپس مقدار حاصل تقسیم با عدد ۵ جمع می‌شود و حاصل این جمع که ۹ است در متغیر x قرار می‌گیرد. اما در عبارت دوم، ابتدا حاصل y با ۵ جمع شده سپس x بر این مجموع تقسیم می‌شود یعنی x = x / (y + 5)

۴- عملگرهای افزایشی و کاهشی: در برنامه نویسی جاوا بسیاری مواقع اتفاق می‌افتد که می‌خواهیم مقدار یک متغیر را یک واحد کاهش یا یک واحد افزایش دهیم. برای این کار به سادگی می‌توانیم از هر کدام از عبارت‌های زیر استفاده کنیم:

int x = 20;
x = x + 1;
 // or
x += 1;

اما در زبان جاوا دو عملگر خاص برای این منظور به وجود آمده‌اند: عملگر افزایش یکانی (++) و عملگر کاهش یکانی (–). این دو عملگر را می‌توان بدون فاصله قبل یا بعد از متغیر قرار داد تا یکی به مقدار متغیر افزوده شده یا یکی از مقدار متغیر کم شود. به مثال‌های زیر دقت کنید:

int x = 20;

x++; // x = x + 1
 // or
++x; // x = x + 1
...
x--; // x = x - 1
 // or
--x; // x = x - 1

اگر عملگرهای افرایش یا کاهش یکانی قبل از نام متغیر قرار بگیرند، آن‌ها را عملگرهای پیش افزایش یکانی یا پیش کاهش یکانی می‌نامند. به همین ترتیب عملگرهای افرایش یا کاهش یکانی که بعد از نام متغیر قرار می‌گیرند، عملگرهای پس افزایش یکانی یا پس کاهش یکانی نامیده می‌شوند.

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

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

int x = 20;
int y;

y = x++; //(1)
 // or
y = ++x; //(2)
...
y = x--; //(3)
 // or
y = --x; //(4)

در عبارت (۱) ابتدا مقدار y برابر مقدار فعلی متغیر x یعنی ۲۰ می‌شود و بعد یک واحد به متغیر x اضافه می‌شود. این عبارت معادل آن است که بنویسیم:

//(۱)
y = x;
x = x + 1;

در عبارت (۲) ابتدا یک واحد به متغیر x افزوده شده و سپس عبارت y = x ارزیابی و محاسبه می‌شود. این عبارت معادل آن است که بنویسیم:

//(۲)
x = x + 1;
y = x;

در عبارت (۳) ابتدا مقدار y برابر مقدار فعلی متغیر x یعنی ۲۰ می‌شود و بعد یک واحد از متغیر x کم می‌شود. این عبارت معادل آن است که بنویسیم:

//(۳)
y = x;
x = x - 1;

و بالأخره در عبارت (۴) ابتدا یک واحد از متغیر x کم شده و سپس عبارت y = x ارزیابی و محاسبه می‌شود. این عبارت معادل آن است که بنویسیم:

//(۴)
x = x - 1;
y = x;

۵- عملگرهای مقایسه‌ای: جاوا عملگرهایی برای مقایسه متغیرها (Variables)، متغیرها و متغیرهای لفظی (Literals) و سایر انواع داده‌ها در برنامه دارد. حاصل این عملگرها یک متغیر بولین است که همواره دارای مقدار true یا false است. جدول زیر شامل فهرست کامل عملگرهای مقایسه‌ای جاوا و مثال‌هایی از هر کدام است:

عملگر معنی مثال توضیح مثال
== تساوی x == 5 اگر x
برابر ۵ باشد حاصل عبارت
true و در غیر این صورت
false است
!= نامساوی x != 5 اگر x
برابر ۵ باشد حاصل عبارت
false و در غیر این صورت
true است
< کوچک‌تر x < 5 اگر x
کوچک‌تر از ۵ باشد حاصل عبارت
true و در غیر این
صورت false است
> بزرگ‌تر x > 5 اگر x
بزرگ‌تر از ۵ باشد حاصل عبارت
true و در غیر این
صورت false‌ است
<= کوچک‌تر یا مساوی x <= 5 اگر x
کوچک‌تر از ۵ یا مساوی ۵ باشد، حاصل عبارت
true و در غیر این
صورت false‌ است
>= بزرگ‌تر یا مساوی x >= 5 اگر x
بزرگ‌تر از ۵ یا مساوی ۵ باشد، حاصل عبارت
true و در غیر این
صورت false‌ است

یک مثال از کاربرد عملگرهای مقایسه‌ای:

boolean hip;
int age = 32;

// (۱)
hip = (age < 25);

// (۲)
hip = ( age == 32 );

// (۳)
hip = (age != 32 );

در مثال فوق ابتدا یک متغیر boolean و سپس یک متغیر int با مقدار اولیه ۳۲ تعریف می‌کنیم. در عبارت اول، مقدار متغیر بولی hip غلط (false) است، زیرا مقدار متغیر age کمتر از ۲۵ نیست. در واقع ۳۲ < 25 نیست. در عبارت دوم مقدار متغیر بولی hip درست (true) است زیرا مقدار age برابر ۳۲ است و ۳۲ = ۳۲ است. مقدار عبارت سوم غلط (false) است زیرا این عبارت بررسی می‌کند که آیا متغیر age مخالف ۳۲ است یا نه؟ و چون مقدار متغیر age مخالف ۳۲ نیست، حاصل عبارت غلط (false) می‌شود.

کاربرد عمده عملگرهای مقایسه‌ای در عبارت‌های شرطی و کنترلی است که در فصل بعدی به طور مفصل به آن‌ها خواهیم پرداخت.

۶- عملگرهای منطقی: عبارت‌هایی که حاصل آن‌ها یک مقدار بولی (boolean) است، می‌توانند با هم ترکیب شده و عبارت‌های پیچیده‌تری بسازند. برای ترکیب این عبارت‌ها می‌توان از عملگرهای منطقی استفاده کرد. این عملگرها عبارتند از «و» (AND)، «یا» (OR)، «مخالف» (NOT) و «یای انحصاری» (XOR). جدول زیر شامل عملگرهای منطقی جاوا و توضیحات و مثال برای هرکدام از آن‌ها است:

عملگر معنی مثال توضیح مثال
& و (AND) A & B اگر هر دو عبارت
درست (true) باشند،
مقدار بازگشتی عبارت، درست (true)
و در غیر این صورت مقدار بازگشتی عبارت غلط (false)
است.
&& و (AND) A && B اگر هر دو عبارت
درست (true) باشند،
مقدار بازگشتی عبارت، درست (true)
و در غیر این صورت مقدار بازگشتی عبارت غلط (false)
است.
| یا (OR) A | B اگر یکی از دو
عبارت درست (true)
باشد، مقدار بازگشتی عبارت، درست (true)
و در غیر این صورت مقدار بازگشتی عبارت غلط (false)
است.
|| یا (OR) A || B اگر یکی از دو
عبارت درست (true)
باشد، مقدار بازگشتی عبارت، درست (true)
و در غیر این صورت مقدار بازگشتی عبارت غلط (false)
است.
^ یای انحصاری (XOR) A ^ B فقط و فقط در
صورتی مقدار بازگشتی عبارت درست (true)
است که یکی از دو عبارت صحیح و دیگری غلط
باشد. اگر هر دو عبارت درست (true)
یا هر دو عبارت غلط (false)
باشند، مقدار بازگشتی عبارت غلط (false)
خواهد شد.

به مثال زیر دقت کنید، می‌خواهیم به دانشجویانی که نمره آن‌ها بین ۱۰ تا ۱۲ است یک اخطار کتبی بدهیم. برای این کار باید دو عبارت شرطی را با هم ترکیب کنیم:

boolean warning = ( grade > 10 ) && ( grade < 12 );

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

float grade = 8.9f;
boolean warning = ( grade > 10 ) && ( grade < 12 );

جاوا هنگام پردازش عبارت منطقی خط دوم، ابتدا بررسی می‌کند که آیا grade > 10 است یا خیر. در مثال ما چون حاصل این عبارت غلط است، در نتیجه کل عبارت غلط می‌شود و جاوا سایر عبارت‌ها را بررسی نمی‌کند. در اکثر موارد این روش بسیار عالی است و نیازهای اکثر مواقع را برطرف می‌کند. اما اگر بخواهیم فارغ از این که کل عبارت درست یا غلط است، همه عبارت‌ها ارزیابی شوند چه باید بکنیم؟ به مثال زیر دقت کنید:

boolean winPrize = ( calculateFactorA() ) && ( calculateFactorB() );

اگر تابع calculateFactorA() مقدار غلط برگرداند، هیچگاه تابع calculateFactorB() فراخوانی نخواهد شد. برای حل این مشکل می‌توان به صورت زیر عمل کرد:

boolean factorA = calculateFactorA();
boolean factorB = calculateFactorB();
boolean winPrize = ( factorA ) && ( factorB );

اما همانطور که می‌بینید، در این روش ما نیاز به دو متغیر اضافه داریم. همچنین تعداد خطوط مورد نیاز برای این کار از یک خط به سه خط افزایش خواهد یافت. در موارد پیچیده‌تر از این ممکن است برنامه خوانایی و وضوح خود را نیز از دست بدهد. برای حل این مشکل، در نسخه‌های اخیر زبان جاوا عملگر & به مجموعه‌ عملگرهای منطقی جاوا افزوده شده است. عملکرد این عملگر کاملاً مشابه && است با یک تفاوت کوچک: برای بررسی مقدار بازگشتی یک عبارت منطقی، تمام عملوندهای آن را بدون توجه به این که کل عبارت درست یا غلط خواهد شد، بررسی می‌کند. با استفاده از عملگر & مثال قبلی ما به شکل زیر اصلاح خواهد شد:

boolean winPrize = ( calculateFactorA() ) & ( calculateFactorB() );

تفاوت | و ||: تفاوت این دو عملگر نیز مانند تفاوت عملگرهای & و && است. جاوا در هنگام بررسی عبارت‌های منطقی شامل عملگر || برای افزایش کارایی اگر یکی از عملوندها درست باشد، از آنجایی که کل عبارت درست می‌شود، سایر عملوندها را بررسی نمی‌کند. اگر بخواهیم جاوا هنگام بررسی چنین عبارت‌هایی همه عملوندها را بررسی کند به جای || از عملگر | استفاده می‌کنیم.

توضیح ضروری: اگر از نسخه‌های قدیمی‌تر JDK مانند J2SDK 1.4 استفاده می‌کنید، اپراتورهای & و | را در اختیار ندارید! هر چه سریع‌تر نسخه جاوای خود را ارتقا دهید!

۷- عملگرهای بیتی: (در حال آماده‌سازی)

۸- اولویت عملگرها: حاصل عبارت زیر چند است؟

int x = 6 + 4 / 2;

آیا مقدار متغیر x برابر ۵ است یا ۸؟ برای پاسخ دادن به این سؤال باید بدانیم که کدام عملگرها زودتر و کدام‌یک دیرتر ارزیابی می‌شوند. اگر + زودتر از / ارزیابی بشود، حاصل عبارت ۵ و در  صورتی که / زودتر ارزیابی شود، حاصل عبارت ۸ خواهد شد. همانطور که از دروس ریاضی خود به خاطر دارید، برخی عملگر دارای اولویت بالاتری نسبت به سایر عملگرها هستند و هرگاه در عبارتی قرار بگیرند، ابتدا حاصل آن‌ها محاسبه شده و سپس سایر عملگرها ارزیابی می‌شوند. جاوا نیز برای انجام محاسبات خود از جدول اولویت عملگرها استفاده می‌کند که در آن هر عملگری دارای یک اولویت است. جدول اولویت عملگرها در جاوا را ببینید:

عملگر توضیح
.  []  () از «.»
برای دسترسی به متدها و متغیرهای داخل اشیا و
کلاس‌ها استفاده می‌شود.از «[]»
برای آرایه‌ها استفاده می‌شود.از «()» برای جداسازی عبارت‌ها استفاده
می‌شود.
++  —  !
~  instanceof
++
عملگر افزایش یکانی– عملگر کاهش یکانی! نقیض (مخالف)~ مکمل بیتی
یکانیinstanceof
عملگری که مشخص می‌کند که شی داده شده از نوع
کلاس مشخص شده است یا نه.
new
(type) Expression
new:
عملگری که یک نمونه از روی کلاس مشخص شده
می‌سازد
(type) Expression
:
تبدیل نوع Expression
به نوع مشخص شده داخل پرانتز
*  /  % ضرب، تقسیم و باقیمانده
+  – جمع و تفریق
<<  >>  >>> <<: شیفت
بیتی به چپ>>:
شیفت بیتی به راست با علامت>>>:
شیفت بیتی به راست بدون علامت
<  >  <=
>=
عملگرهای مقایسه‌ای
==  != عملگرهای تساوی و نامساوی
& عملگر AND
منطقیعملگر AND
بیتی
^ یای انحصاری (XOR)
منطقییای انحصاری (XOR)
بیتی
| عملگر OR
منطقیعملگر OR
بیتی
&& عملگر AND
منطقی
|| عملگر OR
منطقی
? : عملگر میانبر معادل
if-then-else
=  +=  -=
*=  /=  %=  ^=
عملگرهای تساوی
&=  |=  <<=
>>=  >>>=
عملگرهای تساوی

ادامه دارد …

12 فکر می‌کنند “آموزش جاوا، فصل هفتم: عملگرها و اولویت‌ها در زبان جاوا

  1. ارسلان

    استاد ضمن خسته نیاشید یه سوال بد جور مخمو درگیر کرده.لطفا راهنمایی بفرمایین
    منطق این کدهای جاوا (اکثرا برا اندروید) رو چجوری درک کنم؟ هرچی مطالعه میکنم میفهمم که بیشتر نمیفهمم!!!! چجوری باید بفهمم مثلا تو یه سورس کد اندروید که دستمه خطوط کد هاشو رو درک کنم؟مفهوم کلی اونا رو درک میکنم اما جرییات این کدها رو چجوری طراحی میکنن؟ اون نویسنده چجوری اینا رو تشخیص داده و نوشته؟از کجا بفهمم کی از علامتهای مختلف استفاده کنم؟ کی پرانتز بزارم. چه وقتی از یه تابع خاص استفاده کنم و… یه منبع یه راهی معرفی کنین توروخدا

    پاسخ
  2. setare

    عالی بود مرسی.من فقط دنبال علامت نامساوی بودم ولی اونقد خوب توضیح دادید همه چیو ، که همشو خوندم..ممنوووون خسته نباشیید

    پاسخ
  3. مجتبی

    سلام
    NAND و NOR رو چطوری بسازیم؟
    میش یه پرانترز گذاشت قبل پرانتز یدونه ! گذاشت میشه NAND و NOR اما من یک مداری دارم
    دارم از بیرون بهش میگم که این Z چه عملیاتی رو انجام بده:
    z=(a & b)|b&(!a^b)
    آیا عمگر مستقیم برای NAND و NOR است؟
    اگه نیست به نظر شما با چه راه هایی میشه ساخت؟
    تشکر

    پاسخ
    1. علی بهزادیان نژاد نویسنده

      NAND و NOR همون نقیض AND و OR هستن و با ! ساخته میشن و عملگر مخصوص ندارند.

      پاسخ

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

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