نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

عملیات حسابی محاسبات بدون علامت در جاوا

1. عملیات حسابی پایه

جدول زیر عملیات حسابی اساسی مورد استفاده در آن را فهرست می کند زبان جاوا:

بیایید به چند قانون برای کار با عملیات حسابی نگاه کنیم:

  • عبارات از چپ به راست ارزیابی می شوند مگر اینکه پرانتز اضافه شود یا برخی از عملیات ها بیشتر داشته باشند اولویت بالا.
  • عملگرهای *، /، و % اولویت بیشتری نسبت به + و - دارند.

مثال 1: عملیات حسابی روی مقادیر صحیح

برای مثال در این کد متغیرها آو بخواهد داشت معانی مختلف:

کلاس عمومی BasicIntMath ( عمومی استاتیک void main(string args) ( int a = 4 + 5 - 2 * 3; int b = 4 + (5 - 2) * 3; System.out.println("a = " + a) ; System.out.println("b = " + b); ) )

نتیجه اجرا:

A = 3 b = 13

  • عمل تفریق یکنواخت علامت تنها عملوند خود را تغییر می دهد.
  • عملگر جمع unary به سادگی مقدار عملوند خود را برمی گرداند. اصولاً لازم نیست، اما ممکن است.

مثال 2. عملیات جمع و تفریق واحد

کلاس عمومی UnarySignOperation ( عمومی استاتیک void main(string args) ( double a = -6; double b = +6; System.out.println(a); System.out.println(b)؛ ) )
  • هنگامی که یک عملیات تقسیم بر روی یک نوع داده عدد صحیح انجام می شود، نتیجه آن شامل یک جزء کسری نخواهد بود.

مثال 3: تقسیم اعداد صحیح

کلاس عمومی IntDivision ( public static void main (String args) (int a = 16/5; System.out.println(a)؛ ))

نتیجه اجرای این برنامه:

  • عملوندها عملیات حسابیباید از نوع عددی باشد عملیات حسابی را نمی توان روی آن انجام داد انواع منطقیداده، اما روی انواع داده مجاز است کاراکترزیرا در جاوا این نوع در اصل نوعی نوع است بین المللی.

مثال 4. عملیات حسابی روی متغیرهای نوع کاراکتر

کلاس عمومی BasicCharMath1 ( عمومی استاتیک void main(string args) (char c = "n"؛ System.out.println(c); System.out.println(c + 1); System.out.println(c / 5) ;))

نتیجه اجرا:

N 111 22

مثال 5. عملیات حسابی روی متغیرهای نوع کاراکتر

کلاس عمومی BasicCharMath2 ( اصلی خالی استاتیک عمومی (رشته آرگ) ( char c1 = "1"؛ char c2 = "\u0031"؛ char c3 = 49; System.out.println(c1 + c2 + c3); ))

نتیجه اجرا:

    عملگر تقسیم مدول با نماد % نشان داده می شود. این عملگر با تقسیم عدد اول بر عدد دوم، باقیمانده را برمی گرداند. هنگام تقسیم یک عدد صحیح، نتیجه نیز یک عدد صحیح خواهد بود.

مثال 6. تقسیم مدول

کلاس عمومی DivisionByModule ( عمومی استاتیک void main(string args) (int a = 6 % 5; double b = 6.2 % 5.0; System.out.println(a); System.out.println(b)؛ ) )

نتیجه اجرا:

1 1.2000000000000002

2. عملیات محاسباتی مرکب با انتساب

جاوا عملگرهای خاصی دارد که عملیات حسابی را با عملگر انتساب ترکیب می کند. عبارت زیر را در نظر بگیرید:

A = a + 4;

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

A += 4;

عملگرهای تخصیص مرکب نه تنها اندازه کد را کاهش می دهند، بلکه به شما امکان انجام کار را نیز می دهند تبدیل خودکارکه جراحی های مرسوم انجام نمی دهند.

مثال 5: عملیات محاسباتی مرکب با انتساب

کلاس عمومی CompoundOperations ( پوچ استاتیک عمومی main(Args رشته) (int a = 1؛ int b = 2؛ int c = 3؛ a += 3؛ b *= 2؛ c += a * b؛ System.out.println (الف)؛ System.out.println(b)؛ System.out.println(c)؛ )

اکثر عملیات در انواع ابتدایینه با استفاده از روش ها، بلکه با استفاده از آن انجام می شود شخصیت های خاص، تماس گرفت علامت عملیات.

اپراتور واگذاری

وظیفه متغیر ارزشیک ثابت، متغیر یا عبارت دیگری (متغیرها و/یا ثابت هایی که با علائم عملگر از هم جدا شده اند) نامیده می شود عملیات واگذاریو با علامت " نشان داده می شود = "، به عنوان مثال: x = 3 ; y = x; z = x؛ در جاوا، می توان از عملگر انتساب چندین بار در یک عبارت استفاده کرد، به عنوان مثال: x1 = x2 = x3 = 0 ؛ این عملیات از از راست به چپ، یعنی ابتدا به متغیر x3 مقدار 0، سپس به متغیر x2 مقدار متغیر x3 (0) و در نهایت به متغیر x1 مقدار متغیر x2 (0) اختصاص داده می شود. عملیات هایی که آرگومان های آنها اعداد هستند به دو دسته تقسیم می شوند: یگانه(یونری) نشانه های عملیات با یک آرگومان و دودویی(دودویی) با دو آرگومان.

عملیات Unary

عملگرهای Unary زیر در جاوا تعریف شده اند:
  • unary minus "-" - علامت یک عدد یا عبارت را به مخالف تغییر می دهد.
  • unary plus " + " - هیچ عملی را روی یک عدد یا عبارت انجام نمی دهد.
  • مکمل بیتی "~" (فقط برای اعداد صحیح) - همه بیت های فیلد عدد را معکوس می کند (0 به 1 و 1 به 0 تغییر می کند).
  • افزایش "++" (فقط برای اعداد صحیح) - مقدار متغیر را 1 افزایش می دهد.
  • کاهش "-" (فقط برای اعداد صحیح) - مقدار متغیر را 1 کاهش می دهد.
مثال ها عملیات یکنواخت" + " و " - ": int i = 3 , j, k; j= - i; // j = -3 k = + i; // k = 3 مثالی از عملیات مکمل بیتی: int a = 15 ; int b; b = ~a; // b = -16 اعداد a و b اعدادی از نوع int هستند، i.e. به صورت داخلی توسط کامپیوتر به عنوان اعداد صحیح باینری امضا شده با طول 32 بیت نشان داده می شوند، بنابراین نمایش دودویی اعداد a و b به این صورت خواهد بود: a = 00000000 000000000 000000000 00001111 b = 1111111111111111111111111111111 نمایندگی، همه بیت های صفر در عدد a به یک بیت در b و بیت های یک a به بیت های صفر تبدیل می شوند. نمایش دهدهی b برابر با 16 است. علائم عملیات افزایش و کاهش را می توان قبل یا بعد از متغیر قرار داد. این گزینه ها بر این اساس نامگذاری می شوند پیشوندو پسوندثبت این معاملات علامت پیشوندی عملگر، مقدار عملوند خود را برمی‌گرداند بعد ازارزیابی بیان در علامت گذاری پسوند، علامت عملیات در ابتدامقدار عملوند خود را برمی گرداند و تنها پس از آن افزایش یا کاهش را محاسبه می کند، به عنوان مثال: int x = 1, y, z; y = ++x; z= x++ ; به متغیر y مقدار 2 اختصاص داده می شود زیرا مقدار x ابتدا 1 افزایش می یابد و سپس نتیجه به متغیر y اختصاص می یابد. به متغیر z مقدار 1 اختصاص داده می شود زیرا ابتدا به متغیر z یک مقدار اختصاص داده می شود و سپس مقدار x با 1 افزایش می یابد. در هر دو مورد، مقدار جدید x برابر 2 خواهد بود. لازم به ذکر است که در جاوا بر خلاف زبان C، عملیات کاهش و افزایش را می توان بر روی متغیرهای واقعی نیز اعمال کرد. نوع شناورو دو برابر). علائم عملیات باینریبه عملیات با نتیجه عددی و عملیات مقایسه تقسیم می شوند که نتیجه آنها یک مقدار بولی است.

عملیات باینری حسابی

جاوا موارد زیر را تعریف می کند عملیات باینری حسابی:
  • اضافه کردن "+"؛
  • منها کردن " - "؛
  • ضرب " * "؛
  • تقسیم "/"؛
  • محاسبه باقیمانده تقسیم اعداد صحیح "%" (باقی مانده تقسیم عدد اول بر عدد دوم را برمی‌گرداند و نتیجه همان علامت سود سهام را خواهد داشت)، به عنوان مثال، نتیجه عملیات 5% 3 برابر 2 خواهد بود و نتیجه عملیات (-7) %(-4) برابر با 3- خواهد بود. که در عملیات جاواهمچنین می تواند برای متغیرهای واقعی (نوع شناور یا دوگانه) استفاده شود.
نمونه هایی از عملیات حسابی دودویی: int x = 7، x1، x2، x3، x4، x5. x1 = x + 10 ; // x1 = 17 x2 = x – 8 ; // x2 = -1 x3 = x2 * x; // x3 = -7 x4 = x/ 4 ; // x4 = 1 (هنگام تقسیم اعداد صحیح // کسردور انداخته شده) x5 = x% 4 // x5 = 3 (باقی مانده تقسیم// 7 در 4)

عملیات بیتی

  • عملیات بیتی نسخه اصلی را در نظر می گیرد مقادیر عددیبه عنوان فیلدهای بیت و اعمال زیر را روی آنها انجام دهید:
  • تنظیم کمی در منموقعیت امین فیلد نتیجه 1 است اگر هر دو بیت داخل باشند منامین موقعیت عملوندها برابر است با 1 یا 0 در غیر این صورت - به صورت بیتی و ("& ");
  • تنظیم کمی در منموقعیت امین فیلد نتیجه 1 است اگر حداقل یک بیت این باشد منامین موقعیت عملوندها برابر است با 1 یا 0 در غیر این صورت - به صورت بیتی OR (" | ");
  • تنظیم کمی در مناگر بیت ها داخل باشند، موقعیت امین فیلد نتیجه 1 است من-ام موقعیت عملوندها با یکدیگر برابر نیستند، یا در 0 در غیر این صورت - انحصاری بیتی OR (" ^ ");
  • به سمت چپ بیت های میدان عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد تغییر نمی کند) - به صورت بیتی با در نظر گرفتن علامت " به سمت چپ تغییر می کند.<< ";
  • جابجایی به راست بیت های فیلد عملوند اول با تعداد بیت هایی که توسط عملوند دوم تعیین می شود (بیت علامت عدد تغییر نمی کند) - با در نظر گرفتن علامت " >>" به سمت راست حرکت کنید.
  • به سمت راست بیت های فیلد عملوند اول با تعداد بیت های تعیین شده توسط عملوند دوم (بیت علامت عدد نیز جابه جا می شود) - به صورت بیتی بدون در نظر گرفتن " >>> به سمت راست تغییر دهید. " امضا کردن.
نمونه هایی از عملیات بیتی:
  1. به صورت بیتی و

    int x = 112 ; int y = 94 ; int z; z = x & y; // z=80: 00000000 00000000 00000000 01010000
  2. بیتی OR

    int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 int z; z = x | y; // z = 126: 00000000 00000000 00000000 01111110
  3. OR انحصاری بیتی

    int x = 112 ; // x: 00000000 00000000 00000000 01110000 int y = 94 ; // سال: 00000000 00000000 00000000 01011110 int z; z = x^y; // z = 46: 00000000 00000000 00000000 00101110
  4. تغییر سمت چپ بر اساس علامت

    int x = 31 , z; // x: 00000000 00000000 00000000 00011111 z = x<< 2 ; // z = 124: 00000000 00000000 00000000 01111100
  5. شیفت به راست با علامت

    int x = - 17 , z; z = x >> 2 ; // z = -5: 11111111 11111111 11111111 11111011
  6. تغییر به راست بدون در نظر گرفتن علامت

    int x = - 17 , z; // x: 11111111 11111111 11111111 11101111 z = x >>> 2 ; // z = 1073741819 // z: 00111111 11111111 11111111 11111011

عملیات ترکیبی

در جاوا، برای عملیات حسابی باینری می توانید استفاده کنید ترکیب شدهعلائم عملگر (ترکیب): عملیات شناسه = عبارت این معادل عملیات زیر است: شناسه = عبارت عملیات شناسه مثالها:
  1. عبارت x += b به معنای x = x + b است.
  2. عبارت x -= b به معنای x = x - b است.
  3. عبارت x *= b به معنای x = x * b است.
  4. عبارت x /= b به معنای x = x / b است.
  5. عبارت x %= b به معنای x = x % b است.
  6. عبارت x &= b به معنای x = x & b است.
  7. عبارت x |= b به معنای x = x | ب
  8. عبارت x ^= b به معنای x = x ^ b است.
  9. عبارت x<<= b означает x = x << b .
  10. عبارت x >>= b به معنای x = x >> b است.
  11. عبارت x >>>= b به معنای x = x >>> b است.

عملیات مقایسه

جاوا عملگرهای مقایسه زیر را تعریف می کند:
  • " == " (برابر)، " != " (برابر نیست)،
  • " > " (بزرگتر از)، " >= " (بزرگتر یا مساوی)،
  • " < " (меньше) " <= " (меньше или равно)
دارای دو عملوند است و مقدار بولی مربوط به نتیجه مقایسه را برمی گرداند ( نادرستیا درست است، واقعی). لطفاً توجه داشته باشید که هنگام مقایسه دو کمیت برای برابری در جاوا، مانند C و C++، نمادهای " == " (دو علامت مساوی متوالی بدون فاصله)، بر خلاف عملگر انتساب که از نماد استفاده می کند " = ". استفاده از نماد " = " هنگام مقایسه دو مقدار یا باعث خطای کامپایل می شود یا منجر به نتیجه نادرست می شود. نمونه هایی از عملیات مقایسه:بولی isEqual, isNonEqual, isGreater, isGreaterOrEqual, isLess, isLessOrEqual; int x1 = 5، x2 = 5، x3 = 3، x4 = 7; isEqual = x1 == x2; // isEqual = true isNonEqual = x1 != x2; // isNonEqual = false isGreater = x1 > x3; // isGreater = true // isGreaterOrEqual = true isGreaterOrEqual = x2 >= x3; isLess = x3< x1; // isLess = true isLessOrEqual = x1 <= x3; // isLessOrEqual = false

عملیات بولی

عملیات بولیبر روی متغیرهای بولی انجام می شود و نتیجه آنها نیز مقداری از نوع است بولی. عملیات بولی زیر در جاوا تعریف شده است:
  • نفی "!" - جایگزینی false با true یا بالعکس
  • و عملیات "&" - نتیجه فقط در صورتی درست است که هر دو عملوند درست باشند، در غیر این صورت نتیجه نادرست است.
  • یا عملیات "|" - نتیجه فقط در صورتی درست است که حداقل یکی از عملوندها درست باشد، در غیر این صورت نتیجه نادرست است.
  • عمل انحصاری OR "^" - نتیجه فقط در صورتی صادق است که عملوندها با یکدیگر برابر نباشند، در غیر این صورت نتیجه نادرست است.
عملیات " & "، " | " و " ^ "، و همچنین عملیات بیتی مربوطه، می توانند در عملیات انتساب ترکیبی استفاده شوند: " &= "، " |= " و " ^= " علاوه بر این، عملیات " = "برای عملوندهای بولی = " (برابر) و "!=" (برابر نیست) قابل استفاده هستند. همانطور که از تعریف عملگرهای OR و AND می بینید، عملیات OR بدون در نظر گرفتن مقدار عملوند دوم، بدون در نظر گرفتن مقدار عملوند دوم، نتیجه درست را در زمانی که عملوند اول درست است، به دست می آورد، و عملیات AND در صورت اولی، نتیجه را نادرست می کند. عملوند بدون توجه به مقدار عملوند دوم نادرست است. جاوا دو عملگر Boolean دیگر را تعریف می کند: نسخه دوم عملگرهای Boolean AND و OR، که به عنوان عملگرهای منطقی اتصال کوتاه شناخته می شوند: short-AND "&&" و short-Circuit OR "||". هنگام استفاده از این عملیات، عملوند دوم به هیچ وجه ارزیابی نمی شود، که در مواردی مفید است که عملکرد صحیح عملوند سمت راست به درست یا نادرست بودن عملوند چپ بستگی دارد. نمونه هایی از عملیات بولی:بولی isInRange، isValid، isNotValid، isEqual، isNotEqual; int x = 8 ; isInRange = x > 0 && x< 5 ; // isInRange = false isValid = x >0 || x > 5 ; // isValid = true isNotValid = ! معتبر است؛ // isNotValid = false isEqual = isInRange == isValid; // isEqual = false // isNotEqual = true isNotEqual = isInRange != isValid

عملیات مشروط

عمل شرطی به شکل express-1?expression-2:expression-3 نوشته شده است. در این حالت ابتدا عبارت عبارت-1 ارزیابی می شود که باید یک مقدار بولی بدهد و سپس اگر عبارت-1 به درستی ارزیابی شود، عبارت-2 به عنوان نتیجه عملیات ارزیابی شده و برگردانده می شود، یا (اگر عبارت- 1 به غلط ارزیابی می شود)، عبارت-2 ارزیابی و برگردانده می شود. در نتیجه عملیات عبارت-3 برگردانده می شود. نمونه ای از عملیات مشروط: x= n> 1 ? 0 : 1 ; به متغیر x اگر n>1 باشد (عبارت n>1 درست است) مقدار 0 و اگر n≤1 1 باشد (عبارت n>1 نادرست است) به متغیر x نسبت داده می شود.

ارشدیت عملیات

عملیات در عبارات از چپ به راست انجام می شود، اما مطابق با اولویت آنها. بنابراین عملیات ضرب در عبارت y = x + z* 5; قبل از عمل جمع اجرا خواهد شد زیرا اولویت عملیات ضرب از اولویت عمل جمع بالاتر است. اولویت های عملیات (به ترتیب کاهش اولویت) در جاوا در جدول آورده شده است. 1.
براکت های گردافزایش سنوات عملیاتی که در داخل آنها است. بنابراین، اگر پرانتز را در عبارت بالا وارد کنید: y = (x + z) * 5 ; سپس ابتدا عملیات جمع و سپس عملیات ضرب انجام می شود. گاهی اوقات از پرانتز برای خوانایی بیشتر یک عبارت استفاده می شود، به عنوان مثال: (x > 1 ) && (x<= 5 ) ;

تبدیل و ریخته گری هنگام انجام عملیات

عملیات انتساب و عبارات حسابی می توانند از لفظ، متغیرها و عبارات مختلف استفاده کنند، به عنوان مثال: double y; بایت x; y = x + 5 ; این مثال متغیر بایت x را به حرف 5 (int) اضافه می کند و نتیجه را به y اختصاص می دهد. دوبل تایپ کنید. در جاوا، مانند زبان C، تبدیل نوع در هنگام ارزیابی عبارات می تواند به طور خودکار یا با استفاده از عملگر نوع cast انجام شود. با این حال، قوانین برای ریخته گری نوع کمی متفاوت از قوانین زبان C هستند و عموماً سختگیرانه تر از زبان C هستند. هنگام انجام یک عملیات انتساب، تبدیل نوع به طور خودکار انجام می شود اگر تحول در حال گسترش(تبدیل گسترده) و دو نوع سازگار هستند. دگرگونی های در حال گسترش تبدیل هستند بایت® کوتاه® بین المللی® طولانی® شناور® دو برابر. برای گسترش تبدیل، انواع عددی، از جمله عدد صحیح و ممیز شناور، با یکدیگر سازگار هستند. با این حال، انواع عددی با انواع char و boolean سازگار نیستند. انواع char و boolean نیز با یکدیگر ناسازگار هستند. جاوا همچنین هنگام ذخیره یک ثابت عدد صحیح واقعی (که به طور پیش‌فرض روی int است) تبدیل نوع خودکار را در متغیری از نوع بایت، کوتاه یا طولانی انجام می‌دهد (اما اگر literal مقداری خارج از محدوده مقادیر معتبر برای آن نوع داشته باشد، یک پیام خطا صادر می شود: احتمال از دست دادن دقت). اگر تبدیل یک تبدیل باریک باشد، یعنی یک بایت ¬ کوتاه ¬ کاراکتر ¬ طول ¬ شناور ¬ تبدیل مضاعف انجام شود، آنگاه چنین تبدیلی می تواند منجر به از دست دادن دقت عدد یا تحریف آن شود. بنابراین در هنگام تبدیل های باریک، هنگام کامپایل یک برنامه، یک پیام تشخیصی در مورد ناسازگاری نوع نمایش داده می شود و فایل های کلاس ایجاد نمی شوند. اگر بخواهید عبارات نوع بایت یا short را به متغیری از نوع char تبدیل کنید، این پیام نیز صادر خواهد شد. اگر باز هم نیاز به انجام چنین تبدیل هایی باشد، از عملیات نوع ریخته گری استفاده می شود که فرمت زیر را دارد: تبدیل نوع) معنی، جایی که تبدیل نوعنوع تبدیل داده های داده شده را مشخص می کند معنیبه عنوان مثال، در نتیجه اجرای عملگرها: byte x = 71 ; نماد char = (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) سپس، اگر حداقل یک عملوند از نوع طولانی باشد. ، نوع عبارت عدد صحیح به طولانی گسترش می یابد. اگر یکی از عملوندها از نوع 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، نتیجه محاسبات قبلی به دو برابر افزایش می یابد (زیرا ثابت های واقعی به طور پیش فرض از نوع double هستند) و در نهایت، قبل از انجام آخرین جمع، لفظ 10 (int پیش فرض) خواهد بود. به دو برابر گسترش یافت. بنابراین، نتیجه ارزیابی عبارت از نوع double خواهد بود. پسوندهای نوع خودکار (به ویژه پسوندهای کوتاه و بایت به int) می توانند باعث ایجاد خطاهای نادرست در زمان کامپایل شوند. به عنوان مثال، در عملگرها: byte x = 30 , y = 5 ; x = x + y; متغیرهای x و y قبل از انجام جمع به int گسترش می‌یابند، و سپس هنگام تلاش برای اختصاص نتیجه int به یک متغیر بایت، یک پیام خطا ارسال می‌شود. برای جلوگیری از این امر، باید از یک تبدیل نوع صریح در عملگر دوم استفاده کنید: x = (byte) (x + y) ; عبارت x + y باید در داخل پرانتز قرار گیرد زیرا تقدم نوع عملیات ریخته گری محصور در پرانتز بیشتر از اولویت عمل جمع است. به هر حال، اگر عملگر دوم را به شکل بنویسید: x += y; سپس هیچ پیام خطایی وجود نخواهد داشت. لینک اول

تغییر به راست بدون در نظر گرفتن علامت

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

قطعه کد زیر استفاده از عملیات >>> را نشان می دهد. در این مثال، مقدار a به 1- تنظیم شده است، با تمام 32 بیت نمایش باینری 1. سپس این مقدار با 24 بیت به راست جابه جا می شود، بالاترین 24 بیت را با صفر پر می کند و علامت اضافی رایج را نادیده می گیرد. بیت ها در نتیجه مقدار a برابر با 255 می شود.

int a = -1;
a = a >>> 24;

اغلب عملیات >>> آنطور که ما می خواهیم مفید نیست زیرا فقط برای مقادیر 32 و 64 بیتی منطقی است. به یاد داشته باشید که در عبارات، نوع مقادیر کوچکتر به طور خودکار به int ارتقا می یابد. این به معنای اعمال بیت های علامت اضافی و تغییر به مقادیر 32 بیتی به جای 8 یا 16 بیتی است. یعنی ممکن است منظور برنامه نویس این باشد که یک جابجایی به سمت راست غیر حساس به علامت روی یک مقدار بایت انجام دهد و آن را با صفرهایی که از بیت 7 شروع می شود پر کند.

با این حال، در واقعیت اینطور نیست، زیرا تغییر واقعی روی یک مقدار 32 بیتی انجام خواهد شد. برنامه زیر این اثر را نشان می دهد.

// بدون در نظر گرفتن علامت یک مقدار بایت، Shift کنید.
کلاس ByteUSshift (
استاتیک خلاء عمومی اصلی (رشته آرگ) (
کاراکتر هگز = (
«0»، «1»، «2»، «3»، «4»، «5»، «6»، «7»، «8»، «9»، «الف»، «ب»، «ج» "، "د"، "ه"، "ف")؛
بایت b = (بایت) 0xfl;
بایت 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) S 0x0f] + hex) ;
}
}

از خروجی زیر این برنامه می بینید که عملیات »> با مقادیر بایت کاری انجام نمی دهد. برای این مثال، یک مقدار دلخواه به عنوان مقدار متغیر b انتخاب شد معنی منفینوع بایت سپس به متغیر c مقدار متغیر b از نوع بایت، با چهار موقعیت: به سمت راست منتقل می شود، که به دلیل استفاده از بیت های علامت اضافی، برابر با Oxff است. سپس به d مقدار b بایت اختصاص داده می شود که چهار مکان بدون توجه به علامت به سمت راست منتقل می شود که باید مقدار OxOf باشد، اما در واقع به دلیل اعمال بیت های علامت اضافی در هنگام ارتقاء b به int قبل از انجام شیفت برابر با Oxff است. آخرین عبارت مقدار متغیر e را به مقدار بایت متغیر b تنظیم می کند، با استفاده از عملیات AND به 8 بیت پوشانده می شود و سپس با چهار موقعیت به سمت راست منتقل می شود و مقدار مورد انتظار OxOf را به دست می دهد. توجه داشته باشید که عمل تغییر بدون علامت سمت راست برای متغیر d اعمال نشد زیرا وضعیت بیت علامت پس از انجام عملیات AND مشخص بود.

عملیات مرکب بیتی با انتساب

مانند عملیات جبری، تمام عملیات بیتی دودویی یک فرم ترکیبی دارند که عملیات بیتی را با عملگر انتساب ترکیب می کند. به عنوان مثال، دو عبارت زیر که یک جابجایی به راست با چهار موقعیت در مقدار متغیر a انجام می دهند، معادل هستند:

به طور مشابه، دو عبارت زیر معادل هستند که نتیجه عملیات بیتی a OR b را به متغیر a نسبت می دهند:

a = a | ب
a |= b;

برنامه زیر چندین متغیر صحیح ایجاد می کند و سپس از عملیات انتساب بیتی مرکب برای دستکاری آن متغیرها استفاده می کند:

کلاس OpBitEquals public static void main(string args)( int a = 1;
int b = 2;
int c = 3;
a |= 4;
b >= 1;
c a ^= c;
System.out.println("a =" + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}

این برنامه خروجی زیر را تولید می کند.

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

  • عملگرهای حسابی؛
  • عملگرهای مقایسه؛
  • عملگرهای بیتی؛
  • عملگرهای منطقی؛
  • اپراتورهای واگذاری؛
  • سایر اپراتورها

عملگرهای حسابی

عملگرهای حسابی- استفاده شده در عبارات ریاضیهمانطور که در جبر استفاده می شود. فرض کنید متغیر عدد صحیح A برابر با 10 و متغیر B برابر با 20 باشد. جدول زیر عملگرهای حسابی در جاوا را فهرست می کند:

مثال

مثال ساده زیر عملگرهای حسابی برنامه ای را نشان می دهد. کد جاوا زیر را در فایل test.java کپی و پیست کنید، این برنامه را کامپایل و اجرا کنید:

آزمون کلاس عمومی ( خلأ استاتیک عمومی اصلی (رشته آرگ) (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 است
>>> (شفت صفر به راست)عملگر Null Shift سمت راست. مقدار عملوندهای چپ با تعداد بیت های مشخص شده توسط عملوند سمت راست به سمت راست منتقل می شود و مقادیر جابه جا شده با صفر پر می شوند.یک >>> 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 = 0011 1100 */ سیستم. 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 نادرست است. جدول زیر عملگرهای Boolean در جاوا را فهرست می کند:

مثال

تست کلاس عمومی ( عمومی استاتیک 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 اختصاص می دهد
+= عملگر انتساب "افزودن"، مقدار عملوند سمت راست را به عملوند چپ اختصاص می دهد. C += A، معادل C = C + A
-= عملگر انتساب "Subtraction"، عملوند سمت چپ را از عملوند راست کم می کند C -= A، معادل C = C - A
*= عملگر انتساب "Multiplication"، عملوند سمت راست را در عملوند چپ ضرب می کند C*=A معادل C=C*A است
/= عملگر انتساب تقسیم، عملوند چپ را بر عملوند راست تقسیم می کند C/=A معادل C=C/A است
%= عملگر انتساب "Module" مدول را با دو عملوند می گیرد و نتیجه آن را به عملوند سمت چپ اختصاص می دهد. C %= A، معادل C = C % A
اپراتور واگذاری شیفت چپ سی
>>= اپراتور واگذاری شیفت راست C >>= 2، مانند C = C >> 2 است
&= عملگر تخصیص بیتی ("AND") C &= 2، مانند C = C & 2 است
^= Bitwise XOR Assignment Operator C^=2، مانند C=C^2 است
|= عملگر انتساب بیتی "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 = (بیان) ? value if true: value if false

مثال

در زیر یک مثال آورده شده است:

آزمون کلاس عمومی (حجم اصلی خالی استاتیک (رشته آرگ) (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 (کلاس/نوع رابط)

مثال ها

اگر متغیر شی مرجع در سمت چپ عبارت، آزمون کلاس رابط/type on را بگذراند سمت راست، نتیجه درست خواهد بود. در زیر یک مثال و شرح عملگر instanceof آورده شده است:

آزمون کلاس عمومی ( public static void main(String args)( String name = "Oleg"; // موارد زیر true خواهد شد، زیرا نوع عبارت 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 | از چپ به راست
منطقی "AND" && از چپ به راست
منطقی "OR" ("OR") || از چپ به راست
مشروط ?: از راست به چپ
وظیفه = += -= *= /= %= >>= از راست به چپ
کاما , از چپ به راست

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

به نظر من زمان آن فرا رسیده که تدوین سندی را آغاز کنیم که به وضوح مشخص کند که شهروندان چه کارهایی می توانند انجام دهند. وقت آزادو کارهایی که نباید انجام دهند

از فیلم ملودی فراموش شده برای فلوت

همه عملگرهای جاوا را می توان به چهار گروه حسابی، منطقی، بیتی و مقایسه ای تقسیم کرد. اجازه دهید هر گروه از عملگرها را به ترتیب در نظر بگیریم. بیایید با حساب شروع کنیم. این عملگرها در جدول ذکر شده اند. 1.2.


جدول 1.2.عملگرهای محاسباتی جاوا

اپراتور نام توضیح
+ اضافه شدن اپراتور باینری نتیجه دستور a+b مجموع مقادیر متغیرهای a و b است
- منها کردن اپراتور باینری نتیجه دستور a-b تفاوت بین مقادیر متغیرهای a و b است
* ضرب اپراتور باینری نتیجه دستور a*b حاصل ضرب مقادیر متغیرهای a و b است
/ بخش اپراتور باینری نتیجه دستور a/b ضریب مقادیر متغیرهای a و b است. برای عملوندهای عدد صحیح، تقسیم عدد صحیح به طور پیش فرض انجام می شود
% باقی مانده اپراتور باینری نتیجه دستور a%b باقیمانده تقسیم عدد صحیح مقادیر متغیرهای a و b است.
+= اضافه (فرم ساده شده با تکلیف) شکل ساده شده عملگر جمع با انتساب. دستور a+=b معادل دستور a=a+b است
-= تفریق (فرم ساده شده با انتساب) شکل ساده شده عملگر تفریق با انتساب. دستور a-=b معادل دستور a=a-b است
*= ضرب (فرم ساده شده با انتساب) شکل ساده شده عملگر ضرب با انتساب. دستور a*=b معادل دستور a=a*b است
/= تقسیم (فرم ساده شده با تکلیف) شکل ساده شده عملگر تقسیم با انتساب. دستور a/=b معادل دستور a=a/b است
%= باقیمانده (فرم ساده شده) شکل ساده شده عملگر باقی مانده با انتساب. دستور a%=b معادل دستور a=a%b است
++ افزایش اپراتور Unary. دستور a++ (یا ++a) معادل a=a+1 است
-- کاهش اپراتور Unary. دستور a-- (یا --a) معادل a=a-1 است

این اپراتورها دارای ویژگی های خاصی هستند. اول از همه، ما به عملگر تقسیم / توجه می کنیم. اگر عملوندها اعداد صحیح باشند، نتیجه تقسیم عدد صحیح به عنوان مقدار برگردانده می شود. دنباله دستورات را در نظر بگیرید:

int a=5,b=2; دو برابر x=a/b;

در این مثال، متغیر x مقدار 2.0 را دریافت می کند، نه آنطور که انتظار دارید 2.5. نکته این است که ابتدا عبارت a/b ارزیابی می شود. از آنجا که


عملوندها عدد صحیح هستند، اجرا می شوند تقسیم عدد صحیح. و تنها پس از این مقدار حاصل به دو فرمت تبدیل شده و به متغیر x اختصاص می یابد.

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

دو برابر x=(دوبل)a/b;

اکنون مقدار متغیر x 2.5 است.

در جاوا، مانند C++، یک گروه ساده شده وجود دارد عملگرهای حسابیبا تکلیف اگر op یکی از عملگرهای جمع، ضرب، تقسیم و باقیمانده باشد، شکل ساده شده این عملگر با انتساب، op= است. این نیز یک عملگر باینری است، مانند عملگر op، و دستوری به شکل x op=y معادل دستور x=x op y است.

دو عملگر یوناری بسیار مفید دیگر عملگرهای افزایشی (++) و کاهشی (--) هستند. عمل عملگر کاهش به این صورت است که مقدار عملوند را یک عدد افزایش می دهد و عملگر کاهش یک عملوند عملوند را کاهش می دهد. به عبارت دیگر دستور x++ معادل دستور x=x+1 و دستور x-- معادل دستور x=x-1 است. عملگرهای افزایش و کاهش نه تنها یک فرم پسوند ارائه شده در اینجا دارند (عملگر بعد از عملوند: x++ یا x-- می آید)، بلکه یک فرم پیشوند نیز دارند (عملگر قبل از عملوند می آید:

X یا --x). از نقطه نظر تأثیر روی عملوند، فرقی نمی‌کند که از فرم پیشوند یا پسوند عملگر استفاده شود. با این حال، اگر عبارتی با عملگر افزایش یا کاهش بخشی از یک عبارت پیچیده تر باشد، در شکل های پیشوند و پسوند عملگرهای افزایش و کاهش تفاوت وجود دارد. اگر از فرم پیشوند عملگر استفاده شود، ابتدا مقدار عملوند تغییر می کند و سپس عبارت ارزیابی می شود. اگر از فرم postfix عملگر استفاده شود، ابتدا عبارت مورد ارزیابی قرار می گیرد و سپس مقدار عملوند تغییر می کند. بیایید به یک مثال کوچک نگاه کنیم:

در این حالت، پس از اجرای دستورات، متغیر n دارای مقدار 11 و متغیر m دارای مقدار 10 خواهد بود. در زمانی که دستور m=n++ اجرا می شود، مقدار متغیر n برابر با 10 است. فرم postfix عملگر increment در دستور m=n++ استفاده می شود، ابتدا مقدار به متغیر m اختصاص می یابد و پس از آن مقدار متغیر n یک افزایش می یابد.

یک نتیجه متفاوت از اجرای دستورات زیر:


هر دو متغیر (n و m) در این حالت دارای مقدار 11 هستند. از آنجایی که دستور m=++n از فرم افزایشی پیشوند استفاده می کند، ابتدا مقدار متغیر n یک و بعد از آن مقدار متغیر n افزایش می یابد. به متغیر m اختصاص داده شده است.

گروه بعدی متشکل از عملگرهای منطقی است. عملوندهای عملگرهای منطقی متغیر و لفظی از نوع بولی هستند. عملگرهای منطقی جاوا در جدول فهرست شده اند. 1.3.

جدول 1.3.عملگرهای منطقی جاوا

اپراتور نام توضیح
& منطقی و اپراتور باینری اگر هر دو عملوند درست باشند، نتیجه عملیات A&B درست است. در غیر این صورت false برگردانده می شود
&& منطقی کوتاه و اپراتور باینری ویژگی عملگر در مقایسه با عملگر & این است که اگر مقدار عملوند اول نادرست باشد، مقدار عملوند دوم بررسی نمی شود.
| منطقی OR اپراتور باینری اگر مقدار حداقل یک عملوند درست باشد، نتیجه عملیات A|B درست است. در غیر این صورت false برگردانده می شود
|| OR منطقی کوتاه اپراتور باینری ویژگی عملگر در مقایسه با عملگر | این است که اگر مقدار عملوند اول درست باشد، مقدار عملوند دوم بررسی نمی شود.
^ انحصاری OR اپراتور باینری اگر مقدار یک و تنها یک عملوند درست باشد، نتیجه عملیات A^B درست است. در غیر این صورت false برگردانده می شود
! نفی منطقی اپراتور Unary. اگر عملوند A نادرست باشد، نتیجه دستور!A درست است. اگر مقدار عملوند A درست باشد، نتیجه دستور!A نادرست است

عملگرهای منطقی معمولاً به عنوان شرایط در استفاده می شوند عبارات مشروطو عملگرهای حلقه

روی میز 1.4 عملگرهای مقایسه مورد استفاده در جاوا را فهرست می کند.

جدول 1.4.عملگرهای مقایسه جاوا


اپراتور نام توضیح
< کمتر نتیجه عملیات A کمتر از ارزشعملوند B. در غیر این صورت مقدار نادرست است
<= کمتر یا مساوی نتیجه عملیات A<=B является значения true, если значение операнда A не больше значения операн- да B. В противном случае значением является false
> بیشتر اگر مقدار عملوند A بزرگتر از مقدار عملوند B باشد، نتیجه A>B درست است. در غیر این صورت، مقدار نادرست است.
>= بیشتر یا برابر نتیجه عمل A>=B در صورتی درست است که مقدار عملوند A کمتر از مقدار عملوند B نباشد. در غیر این صورت مقدار نادرست است.
!= نا برابر اگر عملوندهای A و B مقادیر متفاوتی داشته باشند، عملیات A!=B به درستی ارزیابی می شود. در غیر این صورت مقدار نادرست است

عملگرهای مقایسه معمولاً همراه با عملگرهای منطقی استفاده می شوند.

برای درک اصول عملکرد عملگرهای بیتی، باید حداقل دانش اولیه را داشته باشید نمایش باینریشماره. اجازه دهید چند نکته اساسی را به خواننده یادآوری کنیم.

در نمایش باینری، نماد موقعیتی یک عدد حاوی صفر و یک است.

مهم ترین بیت (اولین بیت در سمت چپ) علامت عدد را تعیین می کند. برای اعداد مثبت، مهم ترین بیت است برابر با صفر، برای موارد منفی - یک.

تبدیل از سیستم اعداد باینری یک عدد مثبت از موقعیتی


ورود نوح


bnbn-1...ب 2ب 1ب 0


(دومی تواند مقادیر 0 یا 1، بالا را بگیرد


کمی برای اعداد مثبت bn= 0) به اعشار به صورت زیر انجام می شود:



n-1 n





+ ... + bn-12



برای تبدیل یک عدد باینری منفی به یک نمایش اعشاری، یک وارونگی بیتی کد انجام می شود (برای عملیات وارونگی بیتی - به زیر مراجعه کنید)، به دست آمده است. عدد باینریتبدیل به سیستم اعشاری، یک به آن اضافه می شود (و یک علامت منفی اضافه می شود).

برای تبدیل یک عدد منفی از اعشار به سیستم دودویییک از مدول عدد کم می شود، نتیجه به تبدیل می شود کد باینریو سپس این کد معکوس می شود.

ضرب یک عدد در دو برابر است با جابجایی نماد موقعیتی عدد باقی مانده توسط یک بیت (پر کردن بیت اول با صفر).

عملگرهای بیتی جاوا در جدول توضیح داده شده است. 1.5.


جدول 1.5.عملگرهای بیتی جاوا

اپراتور نام توضیح
& به صورت بیتی و اپراتور باینری عملیات AND منطقی برای هر جفت بیت عملوند اعمال می شود. نتیجه 1 می شود اگر هر یک از دو بیت مقایسه شده 1 باشد. در غیر این صورت نتیجه 0 خواهد بود
| بیتی OR اپراتور باینری عملیات OR منطقی برای هر جفت بیت عملوند اعمال می شود. اگر حداقل یکی از دو بیت مقایسه شده 1 باشد، نتیجه 1 است. در غیر این صورت نتیجه 0 خواهد بود
^ Bitwise EXCLUSIVE OR اپراتور باینری عملیات منطقی EXCLUSIVE OR برای هر جفت بیت در عملوندها اعمال می شود. نتیجه 1 می شود اگر یکی و تنها یکی از دو بیتی که با هم مقایسه می شوند 1 باشد. در غیر این صورت نتیجه 0 خواهد بود.
~ نفی بیتی اپراتور Unary. کد باینری معکوس می شود: 0 به 1 و 1 به 0 تغییر می کند
>> به راست تغییر دهید اپراتور باینری نتیجه عددی است که با جابجایی نمایش موقعیتی عملوند اول (به سمت چپ عملگر) با تعداد بیت های مشخص شده توسط عملوند دوم (به سمت راست عملگر) به دست می آید. مقدار اصلی عملوند اول تغییر نمی کند. بیت های مرتبه پایین از بین می روند و بیت های مرتبه بالا با کپی کردن بیت علامت پر می شوند
<< جابجایی به چپ اپراتور باینری نتیجه عددی است که با جابجایی نمایش موقعیتی عملوند اول (به سمت چپ عملگر) با تعداد بیت های تعریف شده توسط عملوند دوم (به سمت راست عملگر) به دست می آید. مقدار اصلی عملوند اول تغییر نمی کند. بیت های مرتبه پایین با صفر پر می شوند و بیت های مرتبه بالا گم می شوند
>>> شیفت سمت راست بدون علامت اپراتور باینری نتیجه عددی است که با جابجایی نمایش موقعیتی عملوند اول (به سمت چپ عملگر) به تعداد بیت های مشخص شده توسط عملوند دوم (به سمت راست عملگر) به دست می آید. مقدار اصلی عملوند اول تغییر نمی کند. بیت های مرتبه پایین گم می شوند و بیت های مرتبه بالا با صفر پر می شوند
&= فرم ساده شده بیت و عملگر با انتساب دستوراتی مانند A&A=A&B
|= شکل ساده شده عملگر بیتی | با تکلیف دستوری به شکل A|=B معادل دستور A=A|B است

اپراتور نام توضیح
^= ساده شده دستوری به شکل A^=B معادل دستور است
فرم کتک خورده
اپراتور اول ^ A=A^B
با تکلیف
>>= ساده شده دستوری به شکل A>>=B معادل دستور است
شکل بیتی
اپراتور th >> A=A>>B
با تکلیف
<<= ساده شده تیم نوع A<<=B является эквивалентом команды
شکل بیتی
اپراتور هفتم<< A=A<
با تکلیف
>>>= ساده شده دستوری به شکل A>>>=B معادل دستور است
شکل بیتی
اپراتور ام >>> A=A>>>B
با تکلیف

به استثنای موارد نادر، عملیات بیتی در مواردی که لازم است یک برنامه برای عملکرد بهینه شود، استفاده می شود.

علاوه بر عملگرهای ذکر شده در بالا، جاوا یک عملگر سه تایی دارد (اپراتور دارای سه عملوند است). به طور رسمی، عملگر به صورت ?: نشان داده می شود. دستور فراخوانی این اپراتور به شرح زیر است:

شرط؟value_1:value_2

عملوند اول یک شرط را مشخص می کند - عبارتی که یک مقدار منطقی را به عنوان مقدار برمی گرداند. اگر مقدار عبارت شرط درست باشد، value_1 به عنوان مقدار توسط عملگر سه تایی برگردانده می شود. اگر مقدار عبارت شرط false باشد، عملگر سه تایی value_2 را به عنوان مقدار برمی گرداند.

چند نکته در مورد عملگر انتساب (اپراتور =). که در اپراتور جاواانتساب مقداری را برمی گرداند. دستوری به شکل x=y به صورت زیر اجرا می شود. ابتدا عبارت y ارزیابی می شود و پس از آن این عبارت به نوع متغیر x ریخته می شود و سپس روی این متغیر نوشته می شود. با توجه به اینکه برخلاف سایر عملگرها با اولویت یکسان، انتساب از راست به چپ انجام می شود، دستورات به شکل x=y=z در جاوا معتبر هستند. در این حالت ابتدا مقدار متغیر z به متغیر y و سپس مقدار متغیر y به متغیر x نسبت داده می شود.

نکته دیگر مربوط به اشکال ساده عملگرهای انتساب است، یعنی عملگرهایی مانند op=. اگرچه استدلال شده است که دستوری به شکل A op=B معادل دستور A=A op B است، اما این کاملا درست نیست. هنگام اجرای دستوری به شکل A op=B ابتدا عبارت A op B ارزیابی می شود، سپس مقدار حاصل به نوع متغیر A ریخته می شود و تنها پس از آن به متغیر A اختصاص می یابد. متغیر A در واقع به طور صریح انجام می شود، و در دستور A= A op B نوع ریخته گری ضمنی است، ممکن است تفاوت ظاهر شود.


در استفاده از فرم های کامل و ساده شده دستورات انتساب. بیایید به یک مثال ساده نگاه کنیم:

// صحیح: a+=20;

// نادرست: a=a+b;

که در در این مورددستور a+=20 صحیح است اما دستور a=a+b صحیح نیست. در حالت اول، 20 تحت اللفظی نوع int به دلیل ویژگی‌های عملگر += به اجبار به نوع بایت تبدیل می‌شود. در حالت دوم، نتیجه ارزیابی عبارت a+b به طور خودکار به نوع int گسترش می یابد و ریخته گری خودکار از نوع int به نوع بایت ممنوع است.

در نهایت در جدول ارائه می دهیم. 1.6 داده های اولویت اپراتورهای مختلفدر جاوا

جدول 1.6.اولویت عملگر در جاوا

یک اولویت اپراتورها
براکت های گرد ()، براکت های مربعو عملگر نقطه
افزایش ++، کاهش --، نفی ~ و!
ضرب *، تقسیم / و باقیمانده %
جمع + و تفریق -
تغییر بیت >>،<< и >>>
بزرگتر از >، بزرگتر یا مساوی >=، کمتر یا مساوی با<= и меньше <
برابر == و نابرابر!=
به صورت بیتی و &
انحصاری بیتی OR ^
بیتی OR |
منطقی و &&
منطقی یا ||
اپراتور سه تایی؟:
تخصیص = و اشکال کوتاه عملگرها مانند op=

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

بهترین مقالات در این زمینه