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

عملیات حسابی عملیات واگذاری توسعه یافته

برای انواع داده های عددی صحیح - long، int، short، char و byte - مجموعه دیگری از عملگرها تعریف شده است که می تواند برای بررسی و تغییر وضعیت بیت های جداگانه مقادیر مربوطه استفاده شود. جدول 4.2 این عملگرها را خلاصه می کند. عملگرهای حسابی بیت با هر بیت طوری کار می کنند که انگار یک مقدار مستقل است.

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

اپراتور

نتیجه

اپراتور

نتیجه

به صورت بیتی و(و)

به صورت بیتی و (و) با تکلیف

بیتی OR(یا)

بیتی یا (یا) با تکلیف

به صورت بیتی XOR(XOR)

XOR بیتی (XOR) با تکلیف

تغییر سمت راست

جابجایی به راست با تکلیف

با لایه صفر به راست تغییر مکان دهید

جابجایی به راست با لایه صفر با انتساب

تغییر سمت چپ

جابجایی به چپ با تکلیف

نفی واحد بیتی(نه)

جدول 4.3 نشان می دهد که چگونه هر یک از عملگرهای حسابی بیتی بر ترکیب بیت های ممکن عملوندهای خود تأثیر می گذارد.

جدول 4.3

جابجایی به چپ

اپراتور<< выполняет сдвиг влево всех битов своего левого операнда на число позиций, заданное правым операндом. При этом часть битов в левых разрядах выходит за границы и теряется, а соответствующие правые позиции заполняются нулями.

تغییر سمت راست

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

شیفت سمت راست بدون علامت

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

4.3. اپراتورهای رابطه

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

جدول 4.4

اپراتور

نتیجه

برابر است

نا برابر

بیشتر

کوچکتر

بیشتر یا مساوی

کمتر یا مساوی

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

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

یادداشت های سخنرانی در جاوا. درس 4

(هیچ) (هیچ) ::
(هیچ یک)
(V. Fesyunov)

عملیات (اپراتورها) در زبان جاوا

اکثر عملیات جاوا ساده و شهودی هستند. اینها عملیاتی مانند +، -، *، /،<,>و غیره عملیات ترتیب و اولویت های اجرایی خاص خود را دارند. پس در بیان

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

ابتدا a + b ارزیابی می شود و سپس c از نتیجه کم می شود، زیرا ترتیب این عملیات از چپ به راست است.

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

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

  • عملگر انتساب با علامت "="" نشان داده می شود. مقدار عملوند سمت راست خود را ارزیابی می کند و آن را به عملوند چپ خود اختصاص می دهد و در نتیجه مقدار اختصاص داده شده را برمی گرداند. این مقدار می تواند توسط عملیات های دیگر استفاده شود. دنباله ای از عملیات تخصیص چندگانه از راست به چپ اجرا می شود.

در ساده ترین حالت، همه چیز مثل همیشه به نظر می رسد.

آنچه در اینجا اتفاق می افتد دقیقاً همان چیزی است که به طور شهودی منظور ماست - مجموع a و b محاسبه می شود، نتیجه در x ذخیره می شود. اما در اینجا دو مثال دیگر وجود دارد.

در اولی ابتدا 1 در b وارد می شود، نتیجه عملیات 1 است، سپس این نتیجه در a وارد می شود. در مثال دوم، مجموع a و b محاسبه شده و نتیجه از بین می رود. بی معنی است، اما از نظر نحوی معتبر است.

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

اینها عملیات >،<, >=, <=, != и ==. Следует обратить внимание, что сравнение на равенство обозначается двумя знаками "=". Операндами этих операций могут быть арифметические данные, результат — типа boolean.

عملیات افزایش، کاهش

اینها عملیات ++ و -- هستند. بنابراین y++ (افزایش) مخفف y = y +1 است، به طور مشابه با عملگر کاهش (--).

اما با این عملیات یک نکته ظریف وجود دارد. آنها به دو شکل وجود دارند - پیشوند (++y) و پسوند (y++). عملکرد این عملیات یکسان است - عملوند خود را 1 افزایش می دهند (عملیات کاهش - کاهش) اما نتیجه آنها متفاوت است. فرم پیشوند مقدار عملوندی را که قبلاً با 1 تغییر کرده است، برمی‌گرداند، و فرم پسوند مقدار عملوند را قبل از تغییر برمی‌گرداند.

A=5; x = a++; y = ++a;

در این قطعه، x روی 5 و y روی 7 تنظیم می شود.

عملیات تقسیم عدد صحیح

باید در نظر داشت که تقسیم یک عدد صحیح بر دیگری یک عدد صحیح تولید می کند و گرد نمی شود بلکه قسمت کسری را کنار می گذارد.

باقیمانده تقسیم (مقدار مدول)

جاوا عملگر % دارد که مخفف باقیمانده یک تقسیم است.

عملیات واگذاری توسعه یافته

علاوه بر عملیات معمول "=" در جاوا، عملیات +=، -=، *=، /=، و غیره وجود دارد که اینها مخفف هستند. بنابراین a += b کاملاً معادل a = a + b است. همین امر در مورد سایر عملیات های مشابه نیز صادق است.

عملیات بولی

! - نفی && - منطقی "و" || - منطقی "یا"

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

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

عملیات منطقی بیتی

اینها عملیات هستند

& - به صورت بیتی "و" | - bitwise "or" ^ - bitwise "exclusive or" ~ - bitwise negation

آنها برای هر جفت بیت از عملوندهایشان اجرا می شوند.

عملیات شیفت

<< — сдвиг влево >> - شیفت سمت راست >>> - شیفت سمت راست بدون علامت

این عملیات مقدار عملوند سمت چپ خود را با تعداد بیت های داده شده توسط عملوند سمت راست تغییر می دهد.

عملیات مشروط

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

<условие> ? <выражение1> : < выражение2>

اگر یک<условие>درست است، نتیجه خواهد بود< выражение1>، در غیر این صورت< выражение2>.

به عنوان مثال، "الف< b ? a: b" вычисляет минимум из a и b.

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

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

به عنوان مثال، اجازه دهید روش f(...) یک طولانی تولید کند.

intx = (int)f(10);

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

این عملیات نه تنها برای انواع اساسی، بلکه به کلاس ها. وقتی به وراثت نگاه می کنیم، این موضوع را با جزئیات بیشتری بررسی خواهیم کرد.

لفظ (ثابت)

حسابی

نمونه هایی از ثابت های حسابی

10 - 010 است 8 - 0123 است 83 (1*64 + 2*8 + 3) - 0x10 است 16 - 0x123 است 291 (1*256 + 2*16 +3) - 1e5 است 100000 - 1.23 e-303 است.

پسوندها برای نشان دادن نوع ثابت استفاده می شوند: l (یا L) - طولانی، f (یا F) - شناور، d (یا D) - دو برابر. مثلا،

1L یک واحد است، اما از نوع طولانی است.

حروف بولی

لفظ های بولی درست (درست) و نادرست (نادرست) هستند.

حروف رشته ای

ثبت شده در نقل قول های دوگانه، مثلا

"این یک رشته است"

حروف نویسه

به صورت آپستروف نوشته شده است، به عنوان مثال "F"، "w".

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

- "\n" - انتهای خط (فید خط) - "\r" - بازگشت کالسکه - "\t" - جدول بندی

و تعدادی دیگر

در مرحله دوم، شما می توانید به صراحت کد کاراکتر را یادداشت کنید (فقط باید آن را بدانید). نوشتن کد معمولاً در انجام می شود سیستم اکتال: "\001" یک کاراکتر با کد 1 و غیره است.

بیانیه

اپراتور - بیان

نحو

<выражение>;

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

A = 0; x = (a > b ? a: b); cnt++;

بیانیه شرطی (اگر)

نحو

اگر (<условие>) <оператор1>

اینجا<условие>- این بیان بولی، یعنی عبارتی که true یا false را برمی گرداند. همانطور که از نحو مشاهده می کنید، قسمت else اختیاری است. یک عبارت بعد از if و بعد از دیگری وجود دارد. اگر می خواهید چندین عملگر را در آنجا قرار دهید، باید آن را قرار دهید مسدود کردن . مسدود کردنبا "(" شروع می شود و با ")" پایان می یابد.

در جاوا مرسوم است که همیشه یک بلوک قرار می دهیم، حتی اگر یک عبارت بعد از if یا else وجود داشته باشد.

اگر (a > b) (x = a; ) else (x = b; ) if (پرچم) (پرچم = نادرست؛ init(؛)

در آخرین مثال، flag یک متغیر یا فیلد بولی است، و init() متدی است که در صورت درست بودن پرچم فراخوانی می‌شود (مثلاً «اگر پرچم تنظیم شده است»).

بیانیه بازگشت (از قبل پوشش داده شده است)

عملگر حلقه پیش شرط (در حالی که)

نحو

در حالی که (<условие>) <оператор>

همانند دستور if، در جاوا مرسوم است<оператор>در براکت های مجعد قرار دهید.

Int i = 0; در حالی که (بیشتر) (x /= 2؛ بیشتر = (++i< 10); }

در این مثال، بیشتر باید یک متغیر یا فیلد بولی، x مقداری متغیر یا فیلد حسابی باشد. حلقه 10 بار اجرا می شود.

عملگر حلقه پس شرط (do while)

نحو

انجام دادن<оператор>در حالی که(<условие>);

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

Int i = 0; انجام دهید (x \= 2؛ بیشتر = (++i< 10); } while (more);

عبارت حلقه "با شمارنده" (برای)

نحو

برای (<инициализация>; <условие>; <инкремент>) <оператор>

عنوان چنین چرخه ای شامل سه عبارت (در ساده ترین حالت) است. از نام اپراتور می توان فهمید که برای سازماندهی یک چرخه با شمارنده کار می کند. بنابراین بیان<инициализация>یک بار قبل از اولین تکرار حلقه اجرا می شود. پس از هر بار تکرار حلقه، عبارت اجرا می شود<инкремент>و سپس عبارت<условие>. آخرین عبارت باید منطقی باشد و شرط را برای ادامه حلقه تنظیم کند. آن ها در حالی که درست است، تکرارهای حلقه ادامه خواهند داشت.

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

  • <инициализация>ممکن است یک عبارت نباشد، بلکه یک توصیف با مقدار اولیه مانند "int i = 0" باشد.
  • <инициализация>می تواند لیستی از عبارات جدا شده با کاما باشد، به عنوان مثال "i = 0، r = 1" .
  • <инкремент>همچنین می تواند فهرستی از عبارات باشد، به عنوان مثال "i++، r*=2"
  • تمامی اجزا (<инициализация>, <условие>و<инкремент>) اختیاری هستند. برای بیان<условие>این به این معنی است که شرط همیشه درست در نظر گرفته می شود (یعنی خروج از حلقه باید با وسایلی در درون خود حلقه سازماندهی شود).

آن ها حلقه زیر (حلقه بی نهایت) نیز امکان پذیر است:

برای (؛؛) ( . . . )

برای (int i = 0; i< 10; i++) x /=2;

این "اقتصادی" ترین پیاده سازی حلقه از نمونه های قبلی است.

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

هیچ عبارت goto در جاوا وجود ندارد. همانطور که می دانید، goto منجر به برنامه های بدون ساختار می شود. دستورهای break و continue مشابه ساختار یافته goto هستند.

آنها را می توان در حلقه ها استفاده کرد، و break را می توان در دستور switch نیز استفاده کرد. اجرای دستور break باعث می شود که حلقه بلافاصله خاتمه یابد. دستور continue باعث پایان تکرار فعلی حلقه و شروع یک حلقه جدید می شود. بررسی وضعیت همچنان در این مورد انجام می شود، بنابراین ادامه می تواند باعث پایان حلقه شود.

برای (int i = 0; ;i++) (اگر (OndOnly && i%2 == 0) ادامه دهید؛ y = (x + 1)/x؛ اگر (y - x< 0.001) break; x = y; }

در اینجا oddOnly یک متغیر بولی است. اگر تنظیم شود، تمام تکرارهای زوج با اعداد حلقه با استفاده از عبارت continue حذف می شوند.

شرط خاتمه حلقه در این مثال در وسط حلقه بررسی می شود و در صورت برآورده شدن، حلقه با استفاده از دستور break خاتمه می یابد.

با حلقه‌های تودرتو، دستورهای break و continue می‌توانند نه تنها به حلقه‌ای که در آن قرار دارند، بلکه به حلقه محصورکننده نیز اشاره کنند. برای این کار دستور حلقه محصور باید با یک برچسب مشخص شود که باید در دستور break یا continue مشخص شود. مثلا،

Lbl: در حالی که (...) ( . . . برای (...) ( . . . if (...) شکستن lbl; ) .

در اینجا دستور break باعث خاتمه as می شود برای حلقه، و در حالی که

انتخاب بیانیه (سوئیچ)

برای سازماندهی یک انتخاب در برخی از ارزش های یکی از چندین شاخه اجرا خدمت می کند.

نحو

تعویض (<выражение>) ( مورد<константа1>: <операторы1>مورد<константа2>: <операторы2> . . . }

عبارت باید یک مقدار صحیح یا کاراکتر تولید کند، ثابت ها باید از همان نوع مقدار این عبارت باشند.

عناصر "مورد".<константа>:" برچسب های انتقالی هستند، اگر مقدار عبارت با یک ثابت مطابقت داشته باشد، پرش به این برچسب انجام می شود. اگر مقدار عبارت با هیچ یک از ثابت ها مطابقت نداشته باشد، همه چیز به وجود قطعه پیش فرض بستگی دارد. اگر وجود داشته باشد، در صورت عدم وجود، پرش به پیش‌فرض برچسب رخ می‌دهد، سپس کل عبارت switch نادیده گرفته می‌شود.

  • در دستور سوئیچ، قطعات case هیچ بلوکی را تشکیل نمی دهند. اگر آخرین دستور این قطعه کیس با مورد بعدی دنبال شود، اجرا از اولین دستور این قطعه کیس ادامه می یابد.
  • به همین دلیل، دستور break معمولا در دستور switch استفاده می شود. در انتهای هر قطعه مورد قرار می گیرد.

مثال (فایل SymbolTest.java)

یک برنامه آزمایشی را در نظر بگیرید که از آن استفاده می کند برای بیانیه هاو سوئیچ کنید.

این برنامه تولید می کند به صورت تصادفی 100 کاراکتر الفبای لاتینو آن ها را به عنوان «واکه»، «صامت» و «گاه مصوت» طبقه بندی می کند. AT آخرین دستهکاراکترهای "y" و "w" اختصاص داده شده اند.

کلاس عمومی SymbolTest ( public static void main(string args) ( for (int i = 0; i< 100; i++) { char c = (char)(Math.random()*26 + "a"); System.out.print(c + ": "); switch (c) { case "a": case "e": case "i": case "o": case "u": System.out.println("гласная"); break; case "y": case "w": System.out.println("иногда гласная"); break; default: System.out.println("согласная"); } } } }

در این مثال، چندین عنصر جدید برای ما وجود دارد.

  • از متد تصادفی() کلاس Math استفاده شده است. بیایید نگاهی به مستندات کلاس ریاضی بیندازیم و ببینیم چه کار می کند.
  • در عبارت char c = (char)(Math.random()*26 + "a"); اضافه ساخته شده است مقدار حسابیبا نماد با این اضافه در جاوا، یک کاراکتر به عددی برابر با کد این کاراکتر تبدیل می شود.
  • در عبارت System.out.print(c + ": "); println(...) نیست، اما print(...) استفاده می شود. روش print(...) با println(...) تنها در این است که چاپ را به تغییر نمی دهد خط جدید، به طوری که عبارت print(...) یا println(...) بعدی در همان خط به چاپ ادامه می دهد.

شما همچنین باید به قطعات مورد توجه کنید. به طور رسمی، 7 قطعه از این قبیل وجود دارد، اما 5 مورد از آنها فاقد عملگر هستند. بنابراین، می توانیم در نظر بگیریم که 2 قطعه مورد وجود دارد، اما هر یک از آنها دارای چندین برچسب است.

مشق شب

  • 1 SymbolTest.java را تغییر دهید تا تعداد نمادهای تولید شده توسط پارامتر فراخوانی برنامه تنظیم شود.
  • 2 برنامه ای بنویسید که دو عدد را به عنوان پارامتر فراخوانی بگیرد - طول پایه های یک مثلث قائم الزاویه، و در نتیجه زوایا را بر حسب درجه چاپ کند.


(هیچ یک)

آخرین به روز رسانی: 1397/10/30

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

هر عدد یک عدد خاص دارد نمایش باینری. مثلا عدد 4 اینچ سیستم دودویی 100 و عدد 5 101 است و به همین ترتیب.

برای مثال، متغیرهای زیر را در نظر بگیرید:

بایت b = 7; // 0000 0111 کوتاه s = 7; // 0000 0000 0000 0111

نوع بایت به ترتیب 1 بایت یا 8 بیت را اشغال می کند که با 8 بیت نمایش داده می شود. بنابراین، مقدار متغیر b در کد باینریبرابر 00000111 خواهد بود. نوع کوتاه 2 بایت یا 16 بیت حافظه را اشغال می کند، بنابراین تعداد از این نوعبا 16 رقم نشان داده می شود. و در این موردمتغیر s در باینری دارای مقدار 0000 0000 0000 0111 خواهد بود.

برای نوشتن اعداد امضا شده در جاوا، استفاده کنید کد اضافی (مکمل دو)، که در آن مهم ترین بیت یک بیت علامت است. اگر مقدار آن 0 باشد، عدد مثبت است و نمایش باینری آن مانند عدد بدون علامت است. به عنوان مثال، 0000 0001 اینچ سیستم اعشاری 1.

اگر مهم ترین بیت 1 باشد، با یک عدد منفی روبرو هستیم. به عنوان مثال، 1111 1111 نشان دهنده -1 در اعشار است. بر این اساس، 1111 0011 نشان دهنده -13 است.

عملیات بولی

عملیات بولی روی اعداد بیانگر عملیات بیتی است. در این حالت اعداد در نمایش باینری در نظر گرفته می شوند، مثلاً 2 در سیستم باینری برابر با 10 و دارای دو رقم است، عدد 7 111 و دارای سه رقم است.

    & (ضرب بولی)

    ضرب بیت به بیت انجام می شود و اگر هر دو عملوند مقادیر بیتی برابر با 1 داشته باشند، عملیات 1 را برمی گرداند، در غیر این صورت عدد 0 برگردانده می شود. به عنوان مثال:

    Int a1 = 2; //010 int b1 = 5;//101 System.out.println(a1&b1); // نتیجه 0 int a2 = 4; //100 اینت b2 = 5; //101 System.out.println(a2 & b2); // نتیجه 4

    در حالت اول دو عدد 2 و 5 داریم. 2 به صورت باینری نشان دهنده عدد 010 و 5 نشان دهنده 101 است. ضرب بیتی اعداد (0*1، 1*0، 0*1) نتیجه 000 را می دهد.

    در حالت دوم، به جای دو، عدد 4 را داریم که در رقم اول یک عدد 1 دارد، درست مانند عدد 5، بنابراین در اینجا نتیجه عمل (1 * 1، 0 * 0، 0 * 1) است. = 100 عدد 4 در قالب اعشار خواهد بود.

    | (اضافه منطقی)

    این عملیات روی ارقام باینری نیز انجام می شود، اما اکنون اگر حداقل یک عدد در این بیت یک واحد داشته باشد (عملیات "OR منطقی") یک واحد برگردانده می شود. مثلا:

    Int a1 = 2; //010 int b1 = 5;//101 System.out.println(a1|b1); // نتیجه 7 - 111 int a2 = 4; //100 int b2 = 5;//101 System.out.println(a2 | b2); // نتیجه 5 - 101

    ^ (XOR منطقی)

    این عملیات XOR نیز نامیده می شود، اغلب برای رمزگذاری ساده استفاده می شود:

    عدد int = 45; // 1001 مقداری که باید رمزگذاری شود - به شکل باینری 101101 int key = 102; // کلید رمزگذاری - در سیستم باینری 1100110 int encrypt = شماره ^ کلید; //نتیجه 1001011 یا 75 خواهد بود System.out.println("شماره رمزگذاری شده: " +encrypt); int decrypt=encrypt^key; // نتیجه شماره اصلی 45 System.out.println خواهد بود("شماره رمزگشایی شده:" + رمزگشایی);

    عملیات بیتی نیز در اینجا انجام می شود. اگر برای هر دو عدد مقادیر متفاوتی از رقم فعلی داشته باشیم، 1 برگردانده می شود، در غیر این صورت 0 برگردانده می شود، به عنوان مثال، نتیجه عبارت 9 ^ 5 عدد 12 خواهد بود و برای رمزگشایی از عدد استفاده می کنیم. عملیات معکوسبه نتیجه

    ~ (نفی منطقی)

    عملیات بیتی که تمام ارقام یک عدد را معکوس می کند: اگر مقدار یک رقم 1 باشد، تبدیل می شود صفر، و بالعکس.

    بایت a = 12; // 0000 1100 System.out.println(~a); // 0011 1111 یا -13

عملیات شیفت

عملیات شیفت روی ارقام اعداد نیز انجام می شود. شیفت می تواند به سمت راست و چپ رخ دهد.

    آ<

    a>>b - عدد a را با رقم b به راست منتقل می کند. به عنوان مثال، 16>>1 عدد 16 (که در باینری 10000 است) را یک رقم به سمت راست جابجا می کند که در نتیجه 1000 یا 8 در اعشار می شود.

    a>>>b - بر خلاف انواع قبلی شیفت این عملیاتیک شیفت بدون علامت را نشان می دهد - عدد a را با بیت b به سمت راست منتقل می کند. برای مثال عبارت -8>>>2 برابر با 1073741822 خواهد بود.

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

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

عملیات واگذاری

وظیفه متغیر ارزشثابت، متغیر یا عبارت دیگری (متغیرها و/یا ثابت هایی که با علائم عملگر جدا شده اند) نامیده می شود عملیات واگذاریو با علامت " = "، به عنوان مثال: 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 کاهش می دهد.
مثال ها عملیات واحد"+" و "-": int i = 3 , j, k; j=-i; // j = -3 k = + i; // k = 3 مثال عملیات مکمل بیتی: int a = 15 ; intb; b=~a; // b = -16 اعداد a و b اعداد هستند int را تایپ کنید، یعنی به صورت داخلی توسط کامپیوتر به‌عنوان اعداد صحیح باینری امضا شده با طول 32 بیت نمایش داده می‌شوند، بنابراین نمایش باینری a و b به این صورت است: به 1 بیت در b و 1 بیت در 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 خواهد بود. AT عملیات جاواهمچنین می تواند برای متغیرهای واقعی (نوع float یا double) استفاده شود.
نمونه های باینری عملیات حسابی: 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 ; intz; 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 intz; z=x | y; // z = 126: 00000000 00000000 00000000 01111110
  3. XOR بیتی

    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
  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 یا بالعکس
  • عملگر AND "&" - نتیجه فقط در صورتی درست است که هر دو عملوند درست باشند، در غیر این صورت نتیجه نادرست است.
  • OR عملیات "|" - نتیجه فقط در صورتی درست است که حداقل یکی از عملوندها درست باشد، در غیر این صورت نتیجه نادرست است.
  • عملگر XOR "^" - نتیجه فقط در صورتی درست است که عملوندها با یکدیگر برابر نباشند، در غیر این صورت نتیجه نادرست است.
عملگرهای "&"، "|" و "^" و همچنین عملگرهای بیتی مربوطه را می توان در عملگرهای انتساب مرکب استفاده کرد: " &= "، " |= " و "^= " علاوه بر این، عملیات " =" برای عملوندهای بولی = " (برابر) و " != " (برابر نیست) قابل استفاده هستند. همانطور که از تعریف عملگرهای OR و AND می بینید، عملیات OR بدون در نظر گرفتن مقدار عملوند دوم، زمانی که عملوند اول true باشد، به درستی ارزیابی می شود، و زمانی که عملوند اول false باشد، عملیات AND به false ارزیابی می شود. صرف نظر از مقدار عملوند دوم. جاوا دو عملگر بولی دیگر را تعریف می کند: نسخه دوم عملگرهای بولی AND و OR، که به عنوان عملگرهای بولی اتصال کوتاه شناخته می شوند: اتصال کوتاه AND "&&" و اتصال کوتاه 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 به غلط ارزیابی شود)، ارزیابی می کند. و عبارت-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 را دریافت می کند. هنگام تبدیل اعداد صحیح یا شناور به داده char، تبدیل به یک کاراکتر در صورتی اتفاق می‌افتد که عدد اصلی بین 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; سپس هیچ پیام خطایی وجود نخواهد داشت. لینک اول

آخرین به روز رسانی: 1397/10/30

بیشتر عملیات در جاوا مشابه عملیاتی است که در سایر زبان های مشابه C استفاده می شود. عملیات تکی (که روی یک عملوند انجام می شود)، عملیات باینری روی دو عملوند و عملیات سه تایی روی سه عملوند وجود دارد. عملوند یک متغیر یا مقدار (مثلاً یک عدد) است که در یک عملیات شرکت می کند. انواع عملیات را در نظر بگیرید.

عملیات حسابی شامل اعداد است. جاوا دارای عملیات حسابی باینری (که روی دو عملوند انجام می شود) و عملیات حسابی تک واحدی (که روی یک عملوند انجام می شود) دارد. عملیات باینری شامل موارد زیر است:

    عملیات جمع دو عدد:

    int a = 10; int b = 7; int c = a + b; // 17 int d = 4 + b; // یازده

    عملیات تفریق دو عدد:

    int a = 10; int b = 7; int c = a - b; // 3 int d = 4 - a; // -6

    عملیات ضرب دو عدد

    int a = 10; int b = 7; int c = a*b; // 70 int d = b * 5; // 35

    عمل تقسیم دو عدد:

    int a = 20; int b = 5; int c = a / b; // 4 دو برابر d = 22.5 / 4.5; // 5.0

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

    دو k = 10 / 4; // 2 System.out.println(k);

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

    k دابل = 10.0 / 4; // 2.5 System.out.println(k);

    بدست آوردن مابقی پس از تقسیم دو عدد:

    int a = 33; int b = 5; int c = a % b; // 3 int d = 22% 4; // 2 (22 - 4*5 = 2)

همچنین دو عمل حسابی واحد وجود دارد که بر روی یک عدد انجام می شود: ++ (افزایش) و -- (کاهش). هر یک از عملیات دارای دو نوع است: پیشوند و پسوند:

    ++ (افزایش پیشوند)

    فرض می کنیم که متغیر یک افزایش می یابد، به عنوان مثال z=++y (ابتدا مقدار متغیر y با 1 افزایش می یابد و سپس مقدار آن به متغیر z نسبت داده می شود)

    Int a = 8; intb = ++a; System.out.println(a); // 9 System.out.println(b); // نه

    ++ (افزایش پسوند)

    همچنین نشان دهنده افزایش یک متغیر در یک متغیر است، برای مثال z=y++ (ابتدا مقدار y به z اختصاص داده می شود و سپس مقدار y با 1 افزایش می یابد).

    Int a = 8; intb = a++; System.out.println(a); // 9 System.out.println(b); // هشت

    -- (کاهش پیشوند)

    متغیر را یک بار کاهش دهید، برای مثال z=--y (ابتدا از مقدار متغیر y 1 کم می شود و سپس مقدار آن به متغیر z اختصاص می یابد)

    Int a = 8; int b = --a; System.out.println(a); // 7 System.out.println(b); // 7

    -- (کاهش پسوند)

    z=y-- (ابتدا y به z اختصاص داده می شود، سپس y با 1 کاهش می یابد)

    Int a = 8; int b = a--; System.out.println(a); // 7 System.out.println(b); // هشت

اولویت عملیات حسابی

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

++ (افزایش)، -- (کاهش)

* (ضرب)، / (تقسیم)، % (باقیمانده تقسیم)

+ (جمع)، - (تفریق)

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

Int a = 8; int b = 7; int c = a + 5 * ++b; System.out.println(c); // 48

عملیات افزایش ++b که اولویت بیشتری دارد، ابتدا انجام می شود - مقدار متغیر b را افزایش می دهد و آن را به عنوان نتیجه برمی گرداند. سپس ضرب 5 * ++b انجام می شود و آخرین آن جمع a + 5 * ++b است

پرانتز به شما امکان می دهد ترتیب ارزیابی را دوباره تعریف کنید:

Int a = 8; int b = 7; int c = (a + 5) * ++b; System.out.println(c); // 104

علیرغم اینکه عملیات جمع اولویت کمتری دارد، ابتدا جمع انجام می شود و نه ضرب، زیرا عمل جمع در داخل پرانتز قرار می گیرد.

انجمنی بودن عملیات

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

    عملگرهای انجمنی چپ که از چپ به راست اجرا می شوند

    عملگرهای ارتباطی راست که از راست به چپ اجرا می کنند

به عنوان مثال، برخی از عملیات مانند ضرب و تقسیم دارای تقدم یکسان هستند. در این صورت نتیجه در عبارت چه خواهد بود:

int x = 10 / 5 * 2;

آیا باید این عبارت را به صورت (10 / 5) * 2 یا 10 / (5 * 2) تفسیر کنیم؟ پس از همه، بسته به تفسیر، نتایج متفاوتی می گیریم.

از آنجایی که همه عملگرهای حسابی (به جز افزایش و کاهش پیشوند) به صورت چپ وابسته هستند، یعنی از چپ به راست اجرا می شوند. بنابراین، عبارت 10 / 5 * 2 باید به صورت (10 / 5) * 2 تفسیر شود، یعنی نتیجه 4 خواهد بود.

عملیات با اعداد ممیز شناور

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

دو برابر d = 2.0 - 1.1; System.out.println(d);

در این حالت، همانطور که در ابتدا ممکن است فرض شود، متغیر d برابر 0.9 نخواهد بود، بلکه 0.8999999999999999 خواهد بود. این خطاهای دقت به این دلیل رخ می‌دهند که اعداد ممیز شناور در سطح پایینی در باینری نشان داده می‌شوند، اما هیچ نمایش باینری برای 0.1 و همچنین برای سایر مقادیر کسری وجود ندارد. بنابراین، اگر در چنین مواردی معمولاً از کلاس BigDecimal استفاده می شود که به شما امکان می دهد چنین موقعیت هایی را دور بزنید.

برترین مقالات مرتبط