جاوا مجموعه ای غنی از عملگرها را برای دستکاری متغیرها فراهم می کند. همه عملگرهای جاوا را می توان به گروه های زیر تقسیم کرد:
- عملگرهای حسابی؛
- عملگرهای مقایسه؛
- عملگرهای بیتی؛
- عملگرهای منطقی؛
- اپراتورهای واگذاری؛
- سایر اپراتورها
عملگرهای حسابی
عملگرهای حسابی- در استفاده می شوند عبارات ریاضیهمانطور که در جبر استفاده می شود. فرض کنید متغیر عدد صحیح A 10 و متغیر B 20 باشد. جدول زیر عملگرهای حسابی در جاوا را فهرست می کند:
مثال
مثال ساده زیر عملگرهای حسابی را به صورت برنامه نویسی نشان می دهد. کد جاوا زیر را کپی و در فایل test.java پیست کنید، این برنامه را کامپایل و اجرا کنید:
آزمون کلاس عمومی ( خلأ استاتیک عمومی main (رشته آرگ) ( int a = 10; int b = 20; int c = 25; int d = 25; System.out.println ("a + b = " + (a + b ))؛ System.out.println("a - b = " + (a - b))؛ System.out.println("a * b = " + (a * b))؛ System.out.println(" b / a = " + (b / a)); System.out.println("b % a = " + (b % a)); System.out.println("c % a = " + (c % a ))؛ System.out.println("a++ = " + (a++)); System.out.println("b-- = " + (a--))؛ // تفاوت d++ و ++d را بررسی کنید System .out.println("d++ = " + (d++)); System.out.println("++d = " + (++d)); ) )
A + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5 a++ = 10 b-- = 11 d++ = 25 ++d = 27
اپراتورهای مقایسه
عملگرهای مقایسه زیر در زبان جاوا پشتیبانی می شوند. فرض کنید متغیر A 10 و متغیر B 20 باشد. جدول زیر عملگرهای رابطه ای یا مقایسه ای در جاوا را فهرست می کند:
اپراتور | شرح | مثال |
== | بررسی می کند که آیا مقادیر دو عملوند برابر هستند یا نه، اگر چنین است، آنگاه شرط درست می شود | (A == B) - صحیح نیست |
!= | بررسی می کند که آیا مقادیر دو عملوند برابر هستند یا نه، اگر مقادیر برابر نیستند، شرط درست می شود | (A != B) - مقدار درست است |
> | بررسی می کند که آیا مقدار عملوند سمت چپ بزرگتر از مقدار عملوند سمت راست است، اگر چنین است، آنگاه شرط درست می شود | (الف > ب) - صحیح نیست |
بررسی می کند که آیا مقدار عملوند سمت چپ کمتر از مقدار عملوند راست است یا خیر، اگر بله، شرط درست می شود | (آ | |
>= | بررسی می کند که آیا مقدار عملوند سمت چپ بزرگتر یا مساوی با مقدار عملوند راست است، اگر بله، شرط درست می شود | (A >= B) - مقدار صحیح نیست |
آزمایش می کند که آیا مقدار عملوند سمت چپ کمتر یا مساوی با مقدار عملوند راست است، اگر بله، شرط درست می شود | (آ |
مثال
مثال ساده زیر عملگرهای مقایسه برنامهنویسی را در جاوا نشان میدهد. کد جاوا زیر را کپی و در فایل test.java پیست کنید، این برنامه را کامپایل و اجرا کنید:
تست کلاس عمومی (حجم اصلی خالی ثابت (رشته آرگ) (int a = 10؛ int b = 20؛ System.out.println ("a == b = " + (a == b))؛ System.out.println ("a != b = " + (a != b)); System.out.println("a > b = " + (a > b))؛ System.out.println("a = a = " + (b >= a))؛ System.out.println("b
A == b = غلط a != b = درست a > b = غلط a = a = درست ب
اپراتورهای بیتی
جاوا چندین عملگر بیتی را تعریف می کند که می توانند برای انواع عدد صحیح اعمال شوند: int، long، short، char و byte. در جاوا عملگر بیتی روی بیت ها عمل می کند و یک عملیات را بیت به بیت انجام می دهد. فرض کنید a = 60; و b = 13; سپس در فرمت باینری به صورت زیر خواهند بود:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
فرض کنید متغیر عدد صحیح A 60 و متغیر B 13 باشد. جدول زیر عملگرهای بیتی در جاوا را فهرست می کند:
اپراتور | شرح | مثال |
& (بیتی و) | عملگر AND باینری اگر در هر دو عملوند وجود داشته باشد، مقداری را در نتیجه کپی می کند. | (A & B) 12 می دهد که 0000 1100 است |
| (بیتی یا) | عملگر OR باینری اگر در هر یک از عملوندها وجود داشته باشد، بیتی را کپی می کند. | (A | B) 61 را می دهد که 0011 1101 است |
^ (بیتی منطقی یا) | عملگر XOR باینری اگر در یک عملوند تنظیم شده باشد، کمی کپی می کند، اما نه هر دو. | (A^B) 49 را می دهد که 0011 0001 است |
~ (مکمل بیتی) | عملگر مکمل باینری و دارای اثر "بازتاب" بیت ها است. | (~A) -61 را می دهد که مکمل 1100 0011 در نماد دودویی است. |
عملگر شیفت چپ باینری مقدار عملوندهای سمت چپ با تعداد بیت های مشخص شده توسط عملوند سمت راست به سمت چپ منتقل می شود. | آ | |
>> (تغییر به راست) | عملگر باینری شیفت سمت راست. مقدار عملوند سمت راست با تعداد بیت های داده شده توسط عملوند سمت چپ به سمت راست منتقل می شود. | یک >> 2 عدد 15 را می دهد که 1111 است |
>>> (صفر شیفت سمت راست) | عملگر شیفت به راست صفر. مقدار عملوندهای چپ با تعداد بیت های مشخص شده توسط عملوند سمت راست به راست منتقل می شود و مقادیر جابجا شده با صفر پر می شوند. | یک >>> 2 عدد 15 را می دهد که 0000 1111 است |
مثال
مثال ساده زیر نحوه برنامه نویسی عملگرهای بیتی در جاوا را نشان می دهد. کد جاوا زیر را کپی و در فایل test.java پیست کنید، این برنامه را کامپایل و اجرا کنید:
آزمون کلاس عمومی ( اصلی خالی ثابت عمومی (آرگس رشته) ( int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c)؛ c = a ^ b؛ /* 49 = 0011 0001 */ System. out. println("a ^ b = " + c); c = ~a; /*-61 = 1100 0011 */ سیستم. out.println("~a = " + c); c = a > 2; /* 215 = 1111 */ System.out.println("a >> 2 = " + c); c = a >>> 2 ; /* 215 = 0000 1111 */ System.out.println("a >>> 2 = " + c); ))
نتیجه زیر بدست خواهد آمد:
A&b = 12 a | b = 61 a ^ b = 49 ~a = -61 a > 15 a >>> 15
عملگرهای منطقی
فرض کنید متغیر بولی A درست است و متغیر B نادرست است. جدول زیر عملگرهای منطقی جاوا را فهرست می کند:
مثال
تست کلاس عمومی ( عمومی استاتیک void main(string args) ( boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b)); System.out.println("a | | b = " + (a||b)); System.out.println("!(a && b) = " + !(a && b)); ) )
این نتیجه زیر را ایجاد خواهد کرد:
A &&b = غلط a || b = true !(a && b) = true
اپراتورهای واگذاری
عملگرهای انتساب زیر توسط زبان جاوا پشتیبانی می شوند:
اپراتور | شرح | مثال |
= | عملگر انتساب ساده، مقادیر را از سمت راست عملوند به سمت چپ عملوند اختصاص می دهد. | C = A + B، مقدار A + B را در C اختصاص می دهد |
+= | عملگر انتساب "Addition"، مقادیر عملوند سمت راست را به عملوند چپ اختصاص می دهد. | C += A، معادل C = C + A |
-= | عملگر انتساب "Subtract"، عملوند سمت چپ را از عملوند راست کم می کند | C -= A، معادل C = C - A |
*= | عملگر انتساب "Multiply"، عملوند سمت راست را در عملوند چپ ضرب می کند | C*=A معادل C=C*A است |
/= | عملگر انتساب "Division"، عملوند سمت چپ را بر عملوند راست تقسیم می کند | C /= A معادل C = C / A است |
%= | عملگر انتساب "Modulus"، با استفاده از دو عملوند یک مدول می گیرد و نتیجه آن را به عملوند سمت چپ اختصاص می دهد. | C %= A، معادل C = C % A |
اپراتور انتساب "Shift left" | سی | |
>>= | عملگر انتساب شیفت سمت راست | C >>= 2 مانند C = C >> 2 است |
&= | عملگر انتساب بیتی "AND". | C&=2، مانند C=C&2 است |
^= | عملگر تخصیص XOR بیتی | C^=2، مانند C=C^2 است |
|= | عملگر انتساب بیتی "OR" ("OR") | C |= 2، مانند C = C | 2 |
مثال
مثال ساده زیر عملگرهای منطقی برنامه نویسی را در جاوا نشان می دهد. کد جاوا زیر را کپی و در فایل test.java پیست کنید، این برنامه را کامپایل و اجرا کنید:
آزمون کلاس عمومی ( خلأ استاتیک عمومی اصلی (رشته آرگ) (int a = 10؛ int b = 20؛ int c = 0؛ c = a + b؛ System.out.println("c = a + b = " + c c += a ؛ System.out.println ("c += a = " + c)؛ c -= a ؛ System.out.println ("c -= a = " + c)؛ c *= a System.out.println("c *= a = " + c); a = 10; c = 15; c /= a ; System.out.println("c /= a = " + c); a = 10؛ c = 15؛ c %= a؛ System.out.println("c %= a = " + c؛ c >= 2 ؛ System.out.println("c >>= 2 = " + c) ; c >>= 2 ; System.out.println("c >>= a = " + c); c &= a ; System.out.println("c &= 2 = " + c); c ^= a ; System.out.println("c ^= a = " + c); c |= a ; System.out.println("c |= a = " + c); ) )
نتیجه زیر بدست خواهد آمد:
C = a + b = 30 c + = a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c % = a = 5 c >= 2 = 5 c >>= 2 = 1 c &= a = 0 c ^= a = 10 c |= a = 10
سایر اپراتورها
چندین عملگر دیگر توسط زبان جاوا پشتیبانی می شوند.
عملگر سه تایی یا عملگر شرطی (?:)
اپراتور سه تایی- عملگری که از سه عملوند تشکیل شده و برای ارزیابی عبارات بولی استفاده می شود. عملگر سه تایی در جاوا به عنوان عملگر شرطی نیز شناخته می شود. این. هدف یک اپراتور سه تایی یا بیانیه شرطیاین است که تصمیم بگیرید چه مقداری باید به متغیر اختصاص داده شود. عملگر به صورت زیر نوشته می شود:
متغیر x = (بیان) ? مقدار اگر درست است: مقدار اگر نادرست است
مثال
در زیر یک مثال آورده شده است:
آزمون کلاس عمومی (حضور اصلی استاتیک عمومی (رشته آرگ) (int a, b; a = 10; b = (a == 1) ? 20: 30; System.out.println("مقدار b:" + b) ; b = (a == 10) ? 20: 30;System.out.println("مقدار b:" + b)؛ ) )
نتیجه زیر بدست خواهد آمد:
b value: 30 b value: 20
نمونه اپراتور
نمونه اپراتور- بررسی می کند که آیا شی است نوع خاصی(نوع کلاس یا نوع رابط) و فقط برای متغیرهای شی ارجاع شده استفاده می شود. عملگر instanceof به صورت زیر نوشته می شود:
(متغیر شی مرجع) instanceof (کلاس/نوع رابط)
مثال ها
اگر متغیر شی مرجع در سمت چپ عبارت تست کلاس/نوع رابط را بگذراند سمت راست، نتیجه درست است. در زیر یک مثال و توضیح از عملگر instanceof آورده شده است:
تست کلاس عمومی ( public static void main(string args)( string name = "Oleg"; // موارد زیر درست برمی گردند زیرا نوع String boolean result = name instanceof String؛ System.out.println (نتیجه); ))
نتیجه زیر بدست خواهد آمد:
اگر شی مورد مقایسه با نوع سمت راست تخصیص سازگار باشد، این عملگر همچنان true خواهد بود. در زیر یک مثال دیگر آورده شده است:
کلاس خودرو () کلاس عمومی خودرو، وسیله نقلیه را گسترش میدهد (حجم اصلی استاتیک استاتیک(رشته args)( وسیله نقلیه a = خودروی جدید(؛ نتیجه بولی = نمونهای از خودرو؛ System.out.println(نتیجه)؛ )
نتیجه زیر بدست خواهد آمد:
اولویت عملگر در جاوا
اولویت عملگر گروه بندی عبارات در یک عبارت را تعیین می کند. این بر نحوه ارزیابی عبارت تأثیر می گذارد. برخی از عملگرها دارای اولویت بالاتری نسبت به سایرین هستند. برای مثال، عملگر ضرب اولویت بیشتری نسبت به عملگر جمع دارد:
به عنوان مثال، x = 7 + 3 * 2. در اینجا x به مقدار 13 اختصاص داده می شود، نه 20، زیرا عملگر "*" اولویت بیشتری از "+" دارد، بنابراین ابتدا "3 * 2" و سپس "7" ضرب می شود. "اضافه شده است".
در یک جدول، عملگرهایی با بالاترین اولویت در بالا قرار می گیرند و سطح تقدم به سمت پایین جدول کاهش می یابد. در یک عبارت، اولویت بالای عملگر در جاوا از چپ به راست ارزیابی خواهد شد.
دسته بندی | اپراتور | انجمنی |
پست فیکس | () . (نقطه) | از چپ به راست |
یگانه | ++ - - ! ~ | از راست به چپ |
ضربی | * / % | از چپ به راست |
افزودنی | + - | از چپ به راست |
تغییر مکان | >> >>> | از چپ به راست |
رابطه ای | > >= | از چپ به راست |
برابری | == != | از چپ به راست |
بیتی "AND" | & | از چپ به راست |
انحصاری بیتی "OR" ("XOR") | ^ | از چپ به راست |
بیتی "OR" ("OR") | | | از چپ به راست |
منطقی "AND" ("AND") | && | از چپ به راست |
منطقی "OR" ("OR") | || | از چپ به راست |
مشروط | ?: | از راست به چپ |
وظیفه | = += -= *= /= %= >>= | از راست به چپ |
کاما | , | از چپ به راست |
در درس بعدی در مورد کنترل حلقه در برنامه نویسی جاوا صحبت خواهیم کرد. در این درس انواع مختلف حلقه ها، نحوه استفاده از حلقه ها در توسعه برنامه و برای چه اهدافی از آنها استفاده می شود، توضیح داده می شود.
اپراتورها در جاوا
جاوا از عملگرهای حسابی زیر پشتیبانی می کند (جدول 2.4).
جدول 2.4. عملگرهای حسابی
اضافه
- منها کردن
* ضرب
/ بخش
% محاسبه باقی مانده
++ افزایش
-- کاهش
+= تکلیف با اضافه
-= انتساب با تفریق
*= انتساب با ضرب
/= تکلیف با تقسیم
%= تکلیف با محاسبه باقی مانده
پنج اپراتور اول برای همه آشنا هستند دوره مدرسهریاضیات، و دو عملگر به اصطلاح یکنواخت، و می توان از آنها برای نشان دادن علامت یک عدد معین استفاده کرد. بعد عملگرهایی به نام افزایش (++) و کاهش (--) می آیند.
یکی از آنها (افزایش) به ارزش می افزاید واحد متغیر، دیگری (کاهش)، برعکس، واحد را کاهش می دهد.
این عملگرها بدون فاصله در کنار مقدار متغیر مشخص می شوند. اگر آنها در سمت چپ متغیر باشند، به این شکل پیشوند افزایش یا کاهش می گویند، و به این معنی است که ابتدا یک به متغیر اضافه می شود (یا از آن کم می شود) و سپس در عبارت استفاده می شود. اگر افزایش (یا کاهش) بعد از نام متغیر قرار گیرد، به آن شکل پسوند می گویند، به این معنی که ابتدا متغیر در عبارت استفاده می شود و سپس یک به آن اضافه می شود (یا از آن کم می شود).
پنج عملگر باقی مانده به شرح زیر استفاده می شود:
a += b
مشابه ورودی:
a = a + b
نمونه ای از استفاده از همه این عملگرها در لیست 2.9 نشان داده شده است.
لیست 2.9.
مثال استفاده عملگرهای حسابی
classExample(
{
int a,b,c,d,e;
a=10
b=11;
c=12;
a+ = b; // a=21
a *= c; // a = 252
a = a - c; // a = 240
a -= c; // a = 228
d=5;
e = 10;
System.out.println(++d); خروجی 6
System.out.println(d++); خروجی 6
System.out.println(e--) ; خروجی 10
System.out.println (--e) ; خروجی 8
}
}
اکنون عملگرهای بیتی (بیتی) را در نظر بگیرید (جدول 2.5).
جدول 2.5. Bitwise (Bitwise) اپراتورها
توضیحات اپراتور
- نفی واحد
& بیتی و
| بیتی OR
^ XOR بیتی
<< Сдвиг битов влево
>> Bit Shift به راست
>>> شیفت بیت به سمت راست، بیت بالا را با صفر پر می کند
&=, | =, ^=, <<=, >>=، >>>= تکلیف با عملیات مشابه
با کمک این عملگرها، ما روی اعداد در نمایش باینری آنها کار می کنیم. مثلاً در نظر بگیرید که عدد 15 را به صورت باینری بنویسید. 00001111
عملگر اول، که نفی واحد نامیده می شود، 0 را به 1 و 1 را به 0 تبدیل می کند. عملگر بیتی "و" در پایان یک عدد 1 را تولید می کند اگر هر دو بیت یکسان اعداد مقایسه شده نیز 1 داشته باشند. اگر ترکیب متفاوتی از آنها داشته باشند. اعداد، نتیجه 0 خواهد بود. به عنوان مثال:
C = A & B
فرض کنید A = 15 (00001111) و B 10 (00001010) باشد. عدد C در این حالت برابر با 10 (00001010) خواهد بود. بیتی "OR" به معنای زیر است: اگر حداقل یکی از بیت ها 1 باشد، نتیجه نیز 1 است. "OR" انحصاری بیتی 1 را برمی گرداند اگر فقط یکی از بیت های اعداد مقایسه شده 1 باشد. سه عملگر زیر تغییر می کنند. بیت های سمت چپ با تعداد بیت های مشخص شده، علاوه بر این، انتقال بیت ها به سمت چپ، موقعیت های خالی را با صفر پر می کند. نمونه ای از استفاده از این عملگرها در جدول آورده شده است. 2.6 و فهرست 2.10.
جدول 2.6. عملگرهای شیفت بیت
لیست 2.10.
نمونه ای از استفاده از عملگرهای bit shift
نمونه کلاس
{
اصلی خالی استاتیک عمومی (آرگس های رشته ای)
{
int a=3, b=4, c=5;
int d = a*b;
System.out.println(d);
d = a | ج
System.out.println(d);
d &= a;
System.out.println(d);
}
}
جاوا همچنین از عملگرهای منطقی نشان داده شده در جدول 1 پشتیبانی می کند. 2.7.
جدول 2.7. عملگرهای منطقی
توضیحات اپراتور
= = برابر
!= مساوی نیست
< Меньше
< = Меньше или равно
> بیشتر
> = بزرگتر یا مساوی
& بولی و
| بولی یا
^ Boolean XOR
! نفی
&& مشروط و
| | مشروط یا
&=، |=، ^= انتساب با عملگر مشابه
شش عملگر اول عملگرهای مقایسه نامیده می شوند. آنها به شما اجازه می دهند اعداد را مقایسه کنید و درست یا نادرست را برگردانید. چهار عملگر بعدی بر روی داده های بولی کار می کنند، اما به طور مشابه با عملگرهای بیتی مشابه کار می کنند (فقط بیت 0 را به false و بیت 1 را به درست تغییر دهید).
دو عبارت بعدی برای دو شرط به طور همزمان استفاده می شود، i.e. دو شرط مشخص شده و عملگر «AND شرطی» بین آنها قرار می گیرد. اگر هر دو به درستی ارزیابی شوند، آنگاه true خروجی است. اگر حداقل یکی از آنها نادرست باشد، نتیجه نادرست خواهد بود.
شرطی یا عملگر در صورتی که حداقل یکی از شرایط صحیح باشد، true بر می گرداند. آنها معمولاً در ساختار if استفاده می شوند (در فصل بعدی در مورد آن صحبت خواهیم کرد). نمونه ای از استفاده از همه این عملگرها در لیست 2-11 نشان داده شده است.
لیست 2.11.
مثال استفاده عملگرهای منطقی
نمونه کلاس
{
اصلی خالی استاتیک عمومی (آرگس های رشته ای)
{
int a = 10, b=15, c=20;
بولی b1 = a != b;
بولی b2 = c > a;
بولی b3 = b1 و b2;
بولی b4 = b3^b1;
اگر (b1 && b4 == نادرست) // اگر b1 != b4 پس:
b3 = درست
else // اگر نه، پس:
b2 = نادرست;
}
}
بیایید طرحی برای استفاده از عملگرهای منطقی ارائه دهیم (جدول 2.8).
جدول 2.8. مقادیر منطقی عملگر برای دو متغیر
اکثر عملیات در انواع ابتداییبا روش ها انجام نمی شود، بلکه با شخصیت های خاصتماس گرفت علامت عملیات.
عملیات واگذاری
وظیفه متغیر ارزشثابت، متغیر یا عبارت دیگری (متغیرها و/یا ثابت هایی که با علائم عملگر جدا شده اند) نامیده می شود عملیات واگذاریو با علامت " = "، به عنوان مثال: x = 3 ; y = x; z = x؛ در جاوا، می توان از عملگر انتساب چندین بار در یک عبارت استفاده کرد، به عنوان مثال: x1 = x2 = x3 = 0 ؛ این عملیات از از راست به چپ، یعنی ابتدا به متغیر x3 مقدار 0، سپس x2 به مقدار x3 (0) و در نهایت x1 به مقدار x2 (0) اختصاص داده می شود. : یگانه(یونری) علائم عملیات با یک آرگومان و دودویی(دودویی) با دو آرگومان.عملیات Unary
جاوا عملیات Unary زیر را تعریف می کند:- unary منهای "-" - علامت یک عدد یا عبارت را به مخالف تغییر می دهد.
- unary plus " + " - هیچ عملیاتی را روی یک عدد یا عبارت انجام نمی دهد.
- مکمل بیتی "~" (فقط برای اعداد صحیح) - همه بیت های فیلد عدد را معکوس می کند (0 به 1 و 1 به 0 تغییر می کند).
- افزایش "++" (فقط برای اعداد صحیح) - مقدار متغیر را 1 افزایش می دهد.
- کاهش "-" (فقط برای اعداد صحیح) - مقدار متغیر را 1 کاهش می دهد.
عملیات باینری حسابی
جاوا موارد زیر را تعریف می کند عملیات باینری حسابی:- اضافه کردن "+"؛
- منها کردن "-"؛
- ضرب " * "؛
- تقسیم "/"؛
- محاسبه باقی مانده تقسیم اعداد صحیح " % " (باقی مانده تقسیم عدد اول بر دوم را برمی گرداند و نتیجه همان علامت سود سهام خواهد بود) ، به عنوان مثال ، نتیجه عملیات 5٪ 3 می شود 2 و نتیجه عملیات (-7) %(-4) برابر با -3 خواهد بود. که در عملیات جاواهمچنین می تواند برای متغیرهای واقعی (نوع float یا double) استفاده شود.
عملیات بیتی
- عملیات بیتی نسخه اصلی را در نظر می گیرد مقادیر عددیبه عنوان فیلدهای بیت و اعمال زیر را روی آنها انجام دهید:
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر هر دو بیت داخل باشند من-مین موقعیت عملوندها برابر با 1 یا 0 در غیر این صورت بیتی و (" & ") است.
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر حداقل یک بیت در آن باشد منموقعیت -امین عملوندها 1 است یا 0 در غیر این صورت - به صورت بیتی OR (" | ");
- تنظیم ضربان به منموقعیت -امین فیلد نتیجه 1 است اگر بیت ها وارد شوند منموقعیتهای -امین عملوندها با یکدیگر برابر نیستند، یا در غیر این صورت با 0 برابر نیستند - OR منحصر بهفرد بیتی ("^").
- به سمت چپ بیت های فیلد عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد در این مورد تغییر نمی کند) - به صورت بیتی با در نظر گرفتن علامت " به سمت چپ تغییر می کند.<< ";
- با تعداد بیت های تعیین شده توسط عملوند دوم به سمت راست بیت های فیلد عملوند اول تغییر دهید (بیت علامت عدد در این مورد تغییر نمی کند) - با در نظر گرفتن علامت به سمت راست حرکت کنید. " >> ";
- شیفت به سمت راست بیت های فیلد عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد نیز در این مورد جابه جا می شود) - تغییر بیتی به راست بدون در نظر گرفتن ">>>" امضاء کردن.
به صورت بیتی و
int x = 112 ; int y = 94 ; intz; z=x & y; // z=80: 00000000 00000000 00000000 01010000بیتی OR
int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 intz; z=x | y; // z = 126: 00000000 00000000 00000000 01111110XOR بیتی
int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 intz; z=x^y; // z = 46: 00000000 00000000 00000000 00101110شیفت چپ با علامت
int x = 31 , z; // x: 00000000 00000000 00000000 00011111 z=x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100شیفت به راست با علامت
int x = - 17 , z; z = x >> 2 ; // z = -5: 11111111 11111111 11111111 11111011بدون علامت به راست تغییر دهید
int x = - 17 , z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2 ; // z = 1073741819 // z: 00111111 11111111 11111111 11111011
عملیات ترکیبی
در جاوا برای عملیات حسابی باینری می توانید استفاده کنید ترکیب شدهعلائم عملیات (ترکیب): شناسه عملیات = عبارت این معادل عملیات زیر است: شناسه = عبارت شناسه عملیات مثالها:- عبارت x += b به معنای x = x + b است.
- عبارت x -= b به معنای x = x - b است.
- عبارت x *= b به معنای x = x * b است.
- عبارت x /= b به معنای x = x / b است.
- عبارت x %= b به معنای x = x % b است.
- عبارت x &= b به معنای x = x & b است.
- عبارت x |= b به معنای x = x | ب
- عبارت x ^= b به معنای x = x ^ b است.
- عبارت x<<= b означает x = x << b .
- عبارت x >>= b به معنای x = x >> b است.
- عبارت x >>>= b به معنای x = x >>> b است.
عملیات مقایسه
جاوا عملگرهای مقایسه زیر را تعریف می کند:- " == " (برابر)، " != " (برابر نیست)،
- " > " (بزرگتر از)، " >= " (بزرگتر یا مساوی)،
- " < " (меньше) " <= " (меньше или равно)
عملیات بولی
عملیات بولیبر روی متغیرهای بولی انجام می شود و نتیجه آنها نیز مقداری از نوع است بولی. جاوا عملیات بولی زیر را تعریف می کند:- نفی "!" - جایگزینی false با true یا بالعکس
- عملگر AND "&" - نتیجه فقط در صورتی درست است که هر دو عملوند درست باشند، در غیر این صورت نتیجه نادرست است.
- OR عملیات "|" - نتیجه فقط در صورتی درست است که حداقل یکی از عملوندها درست باشد، در غیر این صورت نتیجه نادرست است.
- عملگر XOR "^" - نتیجه فقط در صورتی درست است که عملوندها با یکدیگر برابر نباشند، در غیر این صورت نتیجه نادرست است.
عملیات مشروط
عملگر شرطی به شکل express-1?expression-2:expression-3 نوشته شده است. این ابتدا عبارت-1 را ارزیابی می کند، که باید یک مقدار بولی ایجاد کند، و سپس، اگر عبارت-1 به درستی ارزیابی شود، عبارت-2 را به عنوان نتیجه عملیات ارزیابی کرده و برمی گرداند، یا (اگر عبارت-1 به غلط ارزیابی شود)، ارزیابی می کند. و عبارت-3 به عنوان نتیجه عملیات برگردانده می شود. نمونه ای از عملیات مشروط: x= n> 1 ? 0:1; به متغیر x اگر n>1 باشد، مقدار 0 اختصاص داده میشود (عبارت n>1 به درستی ارزیابی میشود) یا 1 اگر n≤1 (عبارت n>1 به نادرست ارزیابی میشود).تقدم عملیات
عملیات در عبارات از چپ به راست انجام می شود، اما با توجه به اولویت آنها. بنابراین عملیات ضرب در عبارت y = x + z* 5 ; قبل از عمل جمع اجرا خواهد شد زیرا عملیات ضرب اولویت بیشتری نسبت به عمل جمع دارد. اولویت های عملیات (به ترتیب کاهش اولویت) در جاوا در جدول آورده شده است. یکیپرانتزها اولویت عملیاتی را که در داخل آنها قرار دارد افزایش می دهد. بنابراین، اگر پرانتز را در عبارت بالا وارد کنید: y = (x + z) * 5 ; سپس ابتدا عملیات جمع و سپس عملیات ضرب انجام می شود. گاهی اوقات از پرانتز برای خوانایی بیشتر یک عبارت استفاده می شود، به عنوان مثال: (x > 1 ) && (x<= 5 ) ;
تبدیل نوع و ریخته گری هنگام انجام عملیات
عملیات انتساب و عبارات حسابی می توانند از لفظ، متغیرها و عبارات مختلف استفاده کنند، به عنوان مثال: double y; بایت y = x + 5 ; این مثال متغیر بایت x و لفظی 5 (نوع int) را اضافه می کند و نتیجه را به متغیر دوتایی y اختصاص می دهد. در جاوا، مانند زبان C، تبدیل نوع در ارزیابی عبارات می تواند به طور خودکار یا با کمک یک عملگر نوع ریخته گری انجام شود. با این حال، قوانین برای ریخته گری نوع تا حدودی با قوانین زبان C متفاوت است و به طور کلی سخت تر از زبان C است. هنگام انجام یک عملیات انتساب، تبدیل نوع به طور خودکار اتفاق می افتد اگر تحول گسترده(تبدیل گسترده) و دو نوع سازگار هستند. دگرگونیهای گستردهتر، تبدیلها هستند بایت® کوتاه® بین المللی® طولانی® شناور® دو برابر. برای گسترش تبدیل، انواع عددی، از جمله عدد صحیح و ممیز شناور، با یکدیگر سازگار هستند. با این حال، انواع عددی با انواع char و boolean سازگار نیستند. نوع char و boolean نیز با یکدیگر سازگار نیستند. زبان جاوا همچنین هنگام ذخیره یک ثابت اعداد صحیح واقعی (که به طور پیشفرض دارای نوع int است) در متغیرهای نوع بایت، کوتاه یا طولانی، تبدیل خودکار نوع را انجام میدهد (اما اگر literal مقداری خارج از محدوده مقادیر معتبر برای در این نوع، یک پیغام خطا ارسال می شود: احتمال از دست دادن دقت). اگر تبدیل در حال باریک شدن باشد (تبدیل باریک)، یعنی تبدیل بایت ¬ کوتاه ¬ کاراکتر ¬ طول ¬ شناور ¬ دو برابر باشد، آنگاه چنین تبدیلی ممکن است منجر به از دست دادن دقت عدد یا تحریف آن شود. بنابراین، تبدیلهای باریک هنگام کامپایل شدن برنامه، یک تشخیص ناسازگاری نوع ایجاد میکند و فایلهای کلاس تولید نمیشوند. چنین پیامی همچنین هنگام تلاش برای تبدیل عبارات نوع بایت یا short به متغیری از نوع char صادر می شود. اگر همچنان نیاز به انجام چنین تبدیل هایی دارید، از عملیات Cast استفاده کنید که فرمت زیر را دارد: نوع تبدیل) معنی، جایی که نوع تبدیلنوع داده شده را که قرار است به آن تبدیل شود را مشخص می کند معنیبه عنوان مثال، در نتیجه اجرای دستورات: byte x = 71 ; نماد کاراکتر = (char ) x; متغیر نماد روی "G" تنظیم می شود. اگر یک مقدار ممیز شناور به یک نوع عدد صحیح اختصاص داده شود، در آن صورت (اگر مقدار ممیز شناور یک قسمت کسری داشته باشد) تبدیل نوع صریح نیز رخ می دهد. کوتاه کردن(قطع) اعداد. بنابراین، در نتیجه اجرای عملگر int x = (int ) 77.85 ; متغیر x مقدار 77 را دریافت می کند. اگر مقدار اختصاص داده شده خارج از محدوده باشد تبدیل نوع ، سپس نتیجه تبدیل، باقیمانده تقسیم مقدار بر مدول محدوده نوع اختصاص داده شده خواهد بود (برای اعداد نوع بایت، مدول محدوده 256، به طور خلاصه - 65536، برای int - 4294967296 خواهد بود. و برای مدت طولانی - 18446744073709551616). به عنوان مثال، در نتیجه اجرای دستور byte x = (byte ) 514 ; متغیر x مقدار 2 را دریافت می کند. هنگام تبدیل اعداد صحیح یا شناور به داده های کاراکتر، تبدیل به یک کاراکتر در صورتی اتفاق می افتد که عدد اصلی بین 0 تا 127 باشد، در غیر این صورت کاراکتر روی "؟" تنظیم می شود. هنگام انجام تبدیلهای حسابی و بیتی، همه مقادیر بایت و کوتاه و همچنین مقادیر char به int گسترش مییابند (در حالی که مقدار عددی کد کاراکتر در محاسبات برای char استفاده میشود) سپس، اگر حداقل یک عملوند از نوع باشد. long، نوع عبارت عدد صحیح به طولانی گسترش می یابد. اگر یکی از عملوندها از نوع float باشد، نوع عبارت کامل به float بسط مییابد و اگر یکی از عملوندها از نوع double باشد، نوع نتیجه دو برابر میشود. بنابراین، اگر متغیرها بایت a, c; ب کوتاه؛ سپس در عبارت a + b * c - 15 L + 1.5F + 1.08 - 10; ابتدا قبل از ارزیابی a + b*c، مقادیر متغیرها به int گسترش مییابد، سپس از آنجایی که ثابت 15 از نوع long است، نتیجه محاسبه به مدت طولانی قبل از تفریق گسترش مییابد. پس از آن، از آنجایی که 1.5 تحت اللفظی از نوع float است، نتیجه ارزیابی a + b*c - 15L قبل از اضافه شدن به این حرف به float گسترش می یابد. قبل از انجام جمع با عدد 1.08، نتیجه محاسبات قبلی به دو برابر افزایش می یابد (زیرا ثابت های واقعی به طور پیش فرض دو برابر می شوند) و در نهایت، قبل از انجام آخرین جمع، لفظ 10 (int به طور پیش فرض) گسترش می یابد. دوبرابر شدن . بنابراین، نتیجه ارزیابی عبارت از نوع double خواهد بود. بسط نوع خودکار (مخصوصاً بسط های کوتاه و بایت به int) می تواند باعث ایجاد خطاهای زمان کامپایل ضعیف شود. به عنوان مثال، در دستورات: بایت x = 30 , y = 5 ; x = x + y; مقدار x و y قبل از انجام جمع به int گسترش مییابد، و سپس هنگام تلاش برای تخصیص نتیجه یک محاسبه int به یک متغیر بایت، خطایی ایجاد میشود. برای جلوگیری از این امر، تبدیل نوع صریح باید در عملگر دوم استفاده شود: x = (byte ) (x + y) ; عبارت x + y باید پرانتز شود زیرا تقدم عملیات ریخته گری پرانتز شده از تقدم عملگر جمع بیشتر است. به هر حال، اگر عملگر دوم را به صورت زیر بنویسیم: x += y; سپس هیچ پیام خطایی وجود نخواهد داشت. لینک اولعملگرها در زبان جاوا کاراکترهای خاصی هستند که به کامپایلر می گویند که می خواهید عملیاتی را روی برخی از عملوندها انجام دهید. برخی از عملگرها به یک عملوند نیاز دارند که نامیده می شوند یگانه.برخی از عملگرها قبل از عملوندها قرار می گیرند و فراخوانی می شوند پیشوند،دیگران - پس از آن، آنها نامیده می شوند پسونداپراتورها اکثر عملگرها بین دو عملوند قرار می گیرند، چنین عملگرهایی نامیده می شوند infixعملگرهای باینری یک عملگر سه تایی وجود دارد که بر روی سه عملوند عمل می کند.
جاوا دارای 44 اپراتور داخلی است. آنها را می توان به 4 کلاس تقسیم کرد - عملگرهای حسابی، بیتی، مقایسهو بازی فکری
عملگرهای حسابی
عملگرهای حسابی مانند جبر برای محاسبات استفاده می شوند (برای خلاصه عملگرهای حسابی به جدول زیر مراجعه کنید). عملوندهای معتبر باید از نوع عددی باشند. برای مثال نمی توانید از این عملگرها با انواع Boolean استفاده کنید، اما می توانید از این عملگرها با char استفاده کنید، زیرا در جاوا نوع char زیرمجموعه ای از نوع int است.
اپراتور |
نتیجه |
اپراتور |
نتیجه |
اضافه |
اضافه با تکلیف |
||
تفریق (همچنین منهای یکپارچه) |
تفریق با انتساب |
||
ضرب |
ضرب با انتساب |
||
تقسیم با تکلیف |
|||
مدول |
مدول با تکلیف |
||
افزایش |
کاهش |
چهار عمل حسابی
در زیر یک برنامه ساده است که استفاده از عملگرها را به عنوان مثال نشان می دهد. توجه داشته باشید که عملگرها هم روی اعداد صحیح و هم بر روی متغیرها کار می کنند.
کلاس BasicMath( public static void int a = 1 + 1;
intb = a*3;
اصلی (ارگ های رشته ای) (
int c = b / 4;
int d \u003d b - a؛
int e = -d;
System.out.println("a = +a);
System.out.println("b = +b);
System.out.println("c = +c);
System.out.println("d = +d);
System.out.println("e = +e);
} }
هنگام اجرای این برنامه باید خروجی زیر را دریافت کنید:
C:\>جاوا BasicMath
a = 2
b = 6
c = 1
d=4
e = -4
اپراتور ماژول
عملگر مدولو یا عملگر mod با نماد % نشان داده می شود. این عملگر پس از تقسیم عملوند اول بر دوم، باقیمانده را برمی گرداند. برخلاف C++، تابع mod جاوا نه تنها با اعداد صحیح، بلکه با انواع واقعی نیز کار می کند. برنامه زیر عملکرد این اپراتور را نشان می دهد.
classModulus(
عمومی استاتیک خلأ اصلی (Stringargs ) {
int x = 42;
دو برابر y = 42.3;
System.out.println("x mod 10 = " + x % 10);
System.out.println("y mod 10 = " + y % 10);
} }
هنگامی که این برنامه را اجرا می کنید، نتیجه زیر را دریافت خواهید کرد:
ج:\>مدول
x mod 10 = 2
y mod 10 = 2.3
عملگرهای انتساب حسابی
برای هر یک از عملگرهای حسابی، فرمی وجود دارد که در آن یک تخصیص همزمان با عملیات داده شده انجام می شود. مثال زیر استفاده از این نوع عملگر را نشان می دهد.
کلاس OpEquals(
int a = 1;
int b = 2;
int c = 3;
a += 5;
b *= 4;
c += a * b;
با %= 6;
} }
و این هم نتیجه ای که هنگام اجرای این برنامه به دست می آید:
C:> Java OpEquals
a = 6
b = 8
c = 3
افزایش و کاهش
دو عملگر در C وجود دارد که به آنها عملگرهای افزایشی و کاهشی (++ و --) گفته میشود که خلاصهنویسی برای جمع یا تفریق یکی از یک عملوند است. این عملگرها از این نظر منحصر به فرد هستند که می توانند به صورت پیشوند یا پسوند استفاده شوند. مثال زیر استفاده از عملگرهای افزایش و کاهش را نشان می دهد.
کلاس IncDec(
اصلی خالی استاتیک عمومی (آرگس های رشته ای) (
int a = 1;
int b = 2;
int c = ++b;
int d = a++;
c++;
System.out.println("a =" + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
} }
نتیجه اجرای این برنامه به صورت زیر خواهد بود:
C:\java Inc
a = 2
b = 3
c=4
d=1
عملگرهای بیت صحیح
برای انواع داده های عددی صحیح - long، int، short، char و byte، مجموعه دیگری از عملگرها تعریف شده است که با آن می توانید وضعیت بیت های جداگانه مقادیر مربوطه را بررسی و تغییر دهید. جدول خلاصه ای از این عملگرها را ارائه می دهد. عملگرهای حسابی بیت با هر بیت طوری کار می کنند که انگار یک مقدار مستقل است.
اپراتور |
نتیجه |
اپراتور |
نتیجه |
نفی واحد بیتی (NOT) |
|||
بیتی و (AND) |
بیتی AND (AND) با انتساب |
||
بیتی یا (OR) |
بیتی OR (OR) با انتساب |
||
OR انحصاری بیتی (XOR) |
OR انحصاری بیتی (XOR) با انتساب |
||
تغییر سمت راست |
جابجایی به راست با تکلیف |
||
با لایه صفر به راست تغییر مکان دهید |
جابجایی به راست با لایه صفر با انتساب |
||
تغییر سمت چپ |
جابجایی به چپ با تکلیف |
نمونه ای از برنامه ای که بیت ها را دستکاری می کند
جدول زیر نشان می دهد که چگونه هر یک از عملگرهای حسابی بیتی بر ترکیب بیت های ممکن عملوندهای خود تأثیر می گذارد. مثال زیر استفاده از این عملگرها را در یک برنامه جاوا نشان می دهد.
کلاس Bitlogic(
اصلی خالی استاتیک عمومی (رشته آرگ) (
رشته باینری = ( "OOOO"، "0001"، "0010"، "0011"، "0100"، "0101"، "0110"، "0111", "1000"، "1001"، "1010"، "1011" "، "1100", "1101",
"1110", "1111" };
int a = 3;//0+2+1 یا باینری 0011
int b = 6;//4+2+0 یا باینری 0110
int c = a | ب
int d = a&b;
int e = a^b;
int f = (~a & b) | (a & ~b)؛
int g = ~a & 0x0f;
System.out.println(" a = " + باینری[a]);
System.out.println(" b = " + باینری[b]);
System.out.println(" ab = " + باینری[c]);
System.out.println(" a&b = " + باینری[d]);
System.out.println(" a^b = " + باینری[e]);
System.out.println("~a&b|a^~b = " + باینری[f]);
System.out.println("~a = " + باینری[g]);
} }
در زیر نتیجه ای که با اجرای این برنامه به دست می آید آورده شده است:
C:\>Java BitLogic
a = 0011
b=0110
یک | b=0111
a&b=0010
a^b=0101
~a & b | a&~b=0101
~a = 1100
به چپ و راست جابه جا می شود
اپراتور<< выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями. В предыдущей главе уже говорилось об автоматическом повышении типа всего выражения до int в том случае если в выражении присутствуют операнды типа int или целых типов меньшего размера. Если же хотя бы один из операндов в выражении имеет тип long, то и тип всего выражения повышается до long.
عملگر >> در جاوا به معنای shift right است. تمام بیت های عملوند سمت چپ خود را با تعداد موقعیت های مشخص شده توسط عملوند سمت راست به سمت راست حرکت می دهد. هنگام جابجایی به سمت راست، بیت های اصلی (چپ) منتشر شده از عدد جابجا شده با محتویات قبلی بیت علامت پر می شوند. به این رفتار، بسط بیت علامت می گویند.
برنامه زیر یک مقدار بایت را به یک رشته حاوی نمایش هگزادسیمال آن تبدیل می کند. لطفاً توجه داشته باشید که مقدار جابهجایی باید پوشانده شود، یعنی به طور منطقی در مقدار 0 x0 f ضرب شود تا بیتهای پر شده در نتیجه گسترش علامت پاک شوند و هنگام نمایهسازی آرایهای از ارقام هگزا دسیمال، مقدار را تا حد مجاز کاهش دهیم. .
classHexByte(
char hex = ( "0"، "1، "2"، "3"، "4"، "5"، "6"، "7"، "8"، "9"، "a"، "b" ، "c"، "d"، "e"، "f )؛
بایت b = (بایت) 0xf1;
System.out.println("b = 0x" + hex[(b >> 4) & 0x0f] + hex);
} }
خروجی این برنامه در زیر آمده است:
C:\>java HexByte
b = 0xf1
شیفت سمت راست بدون علامت
اغلب لازم است که هنگام جابجایی به سمت راست، بسط بیت علامت رخ ندهد و بیت های خالی سمت چپ به سادگی با صفر پر شوند.
کلاس ByteUSshift(
اصلی خالی عمومی ثابت (آرگس های رشته ای) (
char hex = ( "0"، "1'، "2"، "3"، "4"، "5"، "6"، "7"، "8"، "9"، "a"، "b" "، "c"، "d"، "e"، "f");
بایت b = (بایت) 0xf1;
بایت c = (بایت) (b >> 4);
بایت d = (بایت) (b >> 4);
بایت e = (بایت) ((b & 0xff) >> 4);
System.out.println("b = 0x" + hex(b >> 4) & 0x0f] + hex);
System.out.println(“ b >> 4 =0x" + hex[(c >> 4) & 0x0f] + hex);
System.out.println("b >>> 4 = 0x" + hex[(d >> 4) & 0x0f] + hex);
System.out.println("(b & 0xff) >> 4 = 0x" + hex[(e >> 4) & 0x0f] + hex);
} }
برای این مثال، متغیر b می تواند با یک عدد منفی دلخواه مقداردهی شود، ما از عددی با نمایش هگزادسیمال 0xf1 استفاده کردیم. به متغیر c نتیجه یک شیفت علامتدار b به راست با 4 بیت اختصاص داده می شود. همانطور که انتظار می رود، بسط بیت علامت باعث می شود 0xf1 به 0xff تبدیل شود. سپس نتیجه یک شیفت بدون علامت b به سمت راست با 4 بیت در متغیر d وارد می شود. می توان انتظار داشت d حاوی 0x0f باشد، اما در واقعیت دوباره 0xff دریافت می کنیم. این نتیجه بسط بیت علامت است که وقتی b به طور خودکار قبل از عملیات شیفت سمت راست به int ارتقا داده شد. در نهایت در عبارت متغیر e موفق می شویم به نتیجه دلخواه برسیم - مقدار 0x0f. برای انجام این کار، باید قبل از انتقال به راست، مقدار متغیر b را به صورت منطقی در ماسک 0xff ضرب میکردیم، بنابراین بیتهای مرتبه بالا پر شده در حین ارتقای نوع خودکار را پاک میکردیم. توجه داشته باشید که دیگر نیازی به استفاده از شیفت سمت راست بدون علامت نیست، زیرا وضعیت بیت علامت را بعد از عملیات AND می دانیم.
C:\>جاوا ByteUSshift
b = 0xf1
b >> 4 = 0xff
b >>> 4 = 0xff
b & 0xff) >> 4 = 0x0f
عملگرهای انتساب بیتی
همانطور که در مورد عملگرهای حسابی، همه عملگرهای بیتی دودویی دارای یک فرم مرتبط هستند که به شما امکان می دهد به طور خودکار نتیجه عملیات را به عملوند سمت چپ اختصاص دهید. که در مثال بعدیچندین متغیر صحیح ایجاد می شود که با استفاده از عملگرهای ذکر شده در بالا عملیات مختلفی انجام می شود.
کلاس OpBitEquals(
اصلی خالی استاتیک عمومی (آرگس های رشته ای) (
int a = 1;
int b = 2;
int c = 3;
a |= 4;
b >>= 1;
از جانب<<= 1;
a ^= c;
System.out.println("a =" + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
} }
نتایج اجرای برنامه به شرح زیر است:
C:\> Java OpBitEquals
a = 3
b = 1
c = 6
اپراتورهای رابطه ای
برای اینکه بتوانیم دو مقدار را با هم مقایسه کنیم، جاوا مجموعه ای از عملگرها دارد که رابطه و برابری را توصیف می کنند. لیست این اپراتورها در جدول آورده شده است.
اپراتور |
نتیجه |
بیشتر یا مساوی |
|
کمتر یا مساوی |
مقادیر از هر نوع، از جمله اعداد صحیح، اعداد واقعی، کاراکترها، بولی ها و مراجع را می توان با استفاده از عملگر برابری == و عملگر نابرابری!= مقایسه کرد. لطفاً توجه داشته باشید که در جاوا، و همچنین در C و C ++، بررسی برابری با دنباله (==) نشان داده می شود. یک علامت واحد (=) یک عملگر انتساب است.
عملگرهای منطقی بولی
عملگرهای منطقی بولی که در جدول زیر خلاصه شده اند، فقط بر روی عملوندهایی از نوع بولی عمل می کنند. همه عملگرهای منطقی باینری دو مقدار بولی را به عنوان عملوند می گیرند و نتیجه ای از همان نوع را برمی گردانند.
اپراتور |
نتیجه |
اپراتور |
نتیجه |
منطقی و (AND) |
AND (AND) با تکلیف |
||
منطقی یا (OR) |
OR (OR) با تکلیف |
||
منطقی انحصاری OR (XOR) |
OR انحصاری (XOR) با انتساب |
||
عملگر OR برای ارزیابی سریع عبارات ( مدار کوتاهیا) |
|||
عملگر AND برای ارزیابی سریع عبارات (اتصال کوتاه و) |
|||
نفی یکپارچه منطقی (NOT) |
اپراتور سه تایی if-ther-else |
نتایج عملکرد عملگرهای منطقی روی ترکیبات مختلف مقادیر عملوند در جدول نشان داده شده است.
برنامه زیر تقریباً به طور کامل مثال BitLogic را که قبلاً می دانید تکرار می کند. فقط اما این بار با Boolean Boolean کار می کنیم.
کلاس BoolLogic(
اصلی خالی استاتیک عمومی (آرگس های رشته ای) (
بولی a = درست;
بولی b = نادرست;
بولی c = a | ب
بولی d = a&b;
booleane=a^b;
بولی f = (!a & b) | (a & !b)؛
بولی g = !a;
System.out.println(" a = " + a);
System.out.println(" b = " + ب)؛
System.out.println(" a|b = " + c);
System.out.println(" a&b = " + d);
System.out.println(" a^b = " + e);
System.out.println("!a&b|a&!b = " + f);
System.out.println(" !a = " + g);
} }
C:\>Java BoolLogic
الف = درست
ب = نادرست
a|b = درست است
a&b = نادرست
a^b = درست است
!a&b|a&!b = درست است
!a = نادرست
اپراتورهای تخمین سریع عبارات بولی(اپراتورهای منطقی اتصال کوتاه)
دو مورد جالب به مجموعه عملگرهای منطقی اضافه شده است. اینها نسخه های جایگزین عملگرهای AND و OR برای ارزیابی سریع عبارات بولی هستند. می دانید که اگر عملوند اول یک عملگر OR درست باشد، بدون در نظر گرفتن مقدار عملوند دوم، نتیجه عمل درست است. به طور مشابه، در مورد عملگر AND، اگر عملوند اول نادرست باشد، مقدار عملوند دوم بر نتیجه تأثیر نمی گذارد - همیشه نادرست خواهد بود. اگر از && و || استفاده می کنید به جای شکل های معمول & و |، جاوا عملوند سمت راست یک عبارت بولی را ارزیابی نمی کند اگر پاسخ از مقدار عملوند سمت چپ مشخص باشد. روش معمول استفاده از && و || است تقریباً در همه موارد، ارزیابی عبارات منطقی بولی. نسخه های این اپراتورها & و | فقط برای محاسبات بیتی اعمال می شود.
اپراتور سه تایی if-ther-else
شکل کلی عبارت if-then-use به صورت زیر است:
بیان 1 بیان2: بیان3
به عنوان اولین عملوند - "expression1" - می توان از هر عبارتی استفاده کرد که نتیجه آن یک مقدار بولی است. اگر نتیجه درست باشد، دستور داده شده توسط عملوند دوم، یعنی "expression2" اجرا می شود. اگر عملوند اول نادرست باشد، عملوند سوم - "expression3" اجرا می شود. عملوندهای دوم و سوم، یعنی express2 و express3، باید مقادیری از همان نوع را برگردانند و نباید از نوع void باشند.
برنامه زیر از این عملگر برای بررسی مقسوم علیه قبل از انجام عملیات تقسیم استفاده می کند. در مورد مقسوم علیه صفر، مقدار 0 برگردانده می شود.
کلاس سه گانه (
اصلی خالی استاتیک عمومی (آرگس های رشته ای) (
int a = 42;
int b = 2;
int c = 99;
int d = 0;
int e = (b == 0) ? 0: (a/b)؛
int f = (d == 0) ? 0: (c/d)؛
System.out.println("a =" + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
System.out.println("a / b = " + e);
System.out.println("c / d = " + f);
} }
این برنامه استثنای تقسیم بر صفر را ایجاد نمی کند و نتایج زیر را ایجاد می کند:
ج:\>جاوا سهگانه
a = 42
b = 2
c = 99
d=0
a/b=21
c/d=0
تقدم اپراتور
جاوا ترتیب یا اولویت خاصی از عملیات دارد. در جبر ابتدایی به ما یاد دادند که ضرب و تقسیم نسبت به جمع و تفریق اولویت بیشتری دارد. در برنامه نویسی نیز باید اولویت های عملیات را پیگیری کنید. جدول، اولویت تمامی عملیات زبان جاوا را به ترتیب نزولی فهرست می کند.
سطر اول جدول شامل سه عملگر غیر معمول است که ما هنوز در مورد آنها صحبت نکرده ایم. از پرانتز () برای تعیین اولویت استفاده می شود. همانطور که در فصل قبل آموختید، از براکت های مربع برای نمایه سازی یک متغیر آرایه استفاده می شود. اپراتور. (نقطه) برای جدا کردن عناصر از یک مرجع شی استفاده می شود - ما در این مورد در فصل 7 صحبت خواهیم کرد. همه عملگرهای دیگر قبلاً در این فصل مورد بحث قرار گرفته اند.
اولویت های صریح
از آنجایی که بالاترین اولویت است براکت های گرد، اگر در مورد ترتیب ارزیابی شک دارید یا فقط می خواهید کد خود را خواناتر کنید، همیشه می توانید چندین جفت پرانتز به یک عبارت اضافه کنید.
a >> b + 3
کدام یک از دو عبارت a >> (b + 3) یا (a >> b) + 3 با خط اول مطابقت دارد؟ از آنجایی که عملگر جمع اولویت بیشتری نسبت به عملگر shift دارد، پاسخ صحیح a>> (b + ولی).بنابراین اگر نیاز به انجام یک عملیات دارید (a>>b )+ 3 پرانتزها ضروری هستند
بنابراین، ما انواع اپراتورهای زبان جاوا را در نظر گرفته ایم. اکنون می توانید هر عبارتی را بسازید از جانب انواع مختلفداده ها. در فصل بعدی با ساختارهای انشعاب، حلقه گذاری و نحوه کنترل اجرای برنامه آشنا خواهیم شد.
عملگرهای منطقی اتصال کوتاه && و || برای عملیات منطقی AND (AND) و OR (OR) روی عباراتی از نوع بولی در نظر گرفته شده است. توجه داشته باشید که هیچ عملگر منطقی مختصری برای عملیات XOR (OR انحصاری) وجود ندارد.
عملگرهای منطقی میانبر مشابه عملگرهای & و | هستند اما بر خلاف آنها از آنها استفاده می شود فقطبه عبارات بولی و هرگز اعمال نمی شود انواع انتگرال. با این حال، && و || دارای ویژگی قابل توجهی هستند که اگر بتوان نتیجه را از بخشی از عبارت استنتاج کرد، ارزیابی یک عبارت را کوتاه می کنند (این را با مثال هایی کمی بعد توضیح خواهم داد). به دلیل این ویژگی، && و || به طور گسترده برای رسیدگی به عبارات تهی استفاده می شود. آنها همچنین به افزایش اثربخشی کل برنامه کمک می کنند.
ویژگی کوتاه کردن مستقیماً از تفاوت بین &&/|| ناشی می شود و &/|: آخرین جفت عملگرها باید مقادیر عملگرهای چپ و راست را به عنوان ورودی دریافت کنند، در حالی که برای اولین جفت عملگرها گاهی اوقات برای برگرداندن مقدار عملوند چپ کافی است که مقدار آن را بدانیم. ارزش کل عبارت این رفتار عملگرهای منطقی کوتاه شده بر اساس دو است قوانین ریاضیجدول حقیقت منطقی:
- اگر مقدار حداقل یکی از عملوندهای آن نادرست باشد، یک عبارت با عملگر AND نادرست است.
- یک عبارت با عملگر OR در صورتی درست است که حداقل یکی از عملوندهای آن درست باشد.
- نادرست و X = نادرست
- درست یا X = درست است
یک مثال کد را در نظر بگیرید که اگر رشته غیر پوچ و بیش از 20 کاراکتر باشد، پیام String را چاپ می کند:
1. اگر ((s != null) && (s.length() > 20)) (
2. System.out.println(s);
3. }
همان کار را می توان به طور متفاوت کدگذاری کرد:
1. if (s != null) (
2. اگر (s.length() > 20) (
3. System.out.println(s);
4. }
5. }
اگر رشته s null بود، وقتی متد s.length() را فراخوانی می کردیم، یک NullPointerException دریافت می کردیم. با این حال، در هیچ یک از دو مثال کد، چنین وضعیتی پیش نخواهد آمد. به طور خاص، در مثال دوم، s.length() زمانی که s = null نامیده نمی شود، به لطف عملگر کوتاه &&. اگر تست (s!=null) false (false) را برگرداند، یعنی s یک رشته غیرموجود است، آنگاه کل عبارت نادرست است. این بدان معناست که نیازی به محاسبه مقدار عملوند دوم، یعنی عبارت (s.length()>20) نیست.
با این حال، این اپراتورها عوارض جانبی دارند. به عنوان مثال، اگر عملوند سمت راست عبارتی است که عملیاتی را انجام می دهد، در صورت استفاده از عملگرهای کوتاه شده، اگر عملوند سمت چپ نادرست باشد، این عمل ممکن است با شکست مواجه شود.
یک مثال را در نظر بگیرید:
// مثال اول 1. int val = (int)(2 * Math.random()); 2. آزمون بولی = (val == 0) || (++val == 2); 3. System.out.println("test = " + test + "\nval = " + val); // مثال دوم 1. int val = (int)(2 * Math.random()); 2. آزمون بولی = (val == 0)|(++val == 2); 3. System.out.println("test = " + test + "\nval = " + val);
نمونه اول گاهی اوقات چیزی شبیه به این چاپ می کند:
تست = درست
val = 0
و گاهی این:
تست = درست
val = 2
مثال دوم گاهی اوقات چیزی شبیه به این را چاپ می کند:
تست = درست
val = 1
و گاهی این:
تست = درست
val = 2
و موضوع اینجاست. اگر val 0 باشد، عملوند دوم (++val) هرگز ارزیابی نخواهد شد، یعنی val باقی خواهد ماند. صفر. اگر در ابتدا val برابر با یک، در نتیجه این متغیر افزایش می یابد و val = 2 را خواهیم دید. در مثال دوم، با استفاده از نهعملگرهای کوتاه شده، افزایش همیشه اجرا می شود و بسته به مقدار تصادفی انتخاب شده در مرحله اول، نتیجه همیشه 1 یا 2 خواهد بود. در هر دو مثال، تست روی true تنظیم شده است، زیرا یا val = 0 یا val = 1 و به 2 افزایش می یابد.
بیایید اطلاعات مربوط به عملگرهای کوتاه نویسی && و || را خلاصه کنیم:
- آنها برای عملوندهای نوع بولی اعمال می شوند.
- آنها ارزش عملوند راست را تنها در صورتی ارزیابی می کنند که نتوان نتیجه را از مقدار عملوند سمت چپ محاسبه کرد:
- نادرست و X = نادرست
- درست یا X = درست است