Аритметични оператори

Java поддържа седем аритметични оператора, които работят с всеки числов тип:

Java също поддържа унарния знак минус (-) за промяна на знака на число. Знакът може да бъде променен от оператор от следната форма:

Освен това има унарен плюс - например +3. Унарният плюс е включен за симетрия, без него би било невъзможно да се пишат константи като +2.0.

5.15.1. Целочислена аритметика

Цялочислената аритметика се извършва с допълнение по модул 2 - тоест, когато излиза извън диапазона от валидни стойности (int или long), стойността е равна по модул на стойността на диапазона. По този начин целочислената аритметика никога не препълва, възникват само стойности извън диапазона.

Целочисленото деление се закръгля към нула (т.е. 7/2 е 3 и -7/2 е -3). Делението и остатъкът за цели числа се подчиняват на следното правило:

Следователно 7%2 е равно на 1, а -7%2 е равно на -1. Деление на нула или намиране на остатъка от деление на 0 в целочислена аритметика не е разрешено и води до хвърляне на ArithmeticException.

Аритметичните операции върху знаци са цели числа след неявно преобразуване от char към int.

5.15.2. Аритметика с плаваща запетая

За да работи с плаваща запетая (както за представяне, така и за извършване на операции), Java използва стандарта IEEE 7541985.

валиден за double или float) и дегенерация до нула (стойността също става

малък и неразличим от нула за двойно или плаващо). Има и специално представяне на NaN („Не AЧисло", т.е. "не е число") за резултатите от невалидни операции - например деление на нула.

Аритметичните операции с крайните операнди работят в съответствие с общоприетите норми. Знаците на изразите с плаваща запетая също следват тези правила; умножаването на две числа с еднакъв знак дава положително

резултат, докато при умножаване на две числа с различни знаци резултатът ще бъде отрицателен.

Добавянето на две безкрайности с еднакъв знак дава безкрайност със същия знак. Ако знаците се различават, отговорът е NaN. Изваждането на безкрайности със същия знак дава NaN; изваждането на безкрайности с различни знаци дава безкрайност, чийто знак е същият като знака на левия операнд. Например (-(-)) е равно на . Резултатът от всяка аритметична операция, включваща NaN, също е NaN. Преливането води до безкрайност с подходящия знак, а израждането води до нула с подходящия знак. Стандартът IEEE има отрицателна нула, която е +0,0, но 1f/0f е положителна безкрайност, а 1f/-0f е отрицателна безкрайност.

Ако -0,0 == 0,0, как да различите отрицателна нула в резултат на израждане от положителна? Трябва да се използва в израз, който включва знак и да се провери резултата. Например, ако стойността на x е равна на отрицателна нула, тогава изразът 1/x ще бъде равен на отрицателна безкрайност, а ако е положителна, тогава положителна безкрайност.

Операциите с безкрайности се извършват по стандартни математически правила. Добавянето (или изваждането) на крайно число към всяка безкрайност също дава безкрайност. Например (-+x) дава - за всяко крайно x.

Безкрайността може да се получи за сметка на подходящотоаритметична операция или използване на името на безкрайност за обекти от тип float или double: POSITIVE_INFINITY или NEGATIVE_INFINITY. Например Double.NEGATIVE_INFINITY представлява стойността на отрицателна безкрайност за обекти от тип double.

Умножаването на безкрайност по нула води до NaN. Умножаването на безкрайност по ненулево крайно число дава безкрайност със съответния знак.

Делението и делението с остатък може да произведе безкрайност или NaN, но никога да не генерира изключение. Таблицата изброява резултатите от аритметичните операции за различни стойности на операндите: