Как сложить два числа в java
Большинство операций в Java аналогичны тем, которые применяются в других си-подобных языках. Есть унарные операции (выполняются над одним операндом), бинарные — над двумя операндами, а также тернарные — выполняются над тремя операндами. Операндом является переменная или значение (например, число), участвующее в операции. Рассмотрим все виды операций.
В арифметических операциях участвуют числа. В Java есть бинарные арифметические операции (производятся над двумя операндами) и унарные (выполняются над одним операндом). К бинарным операциям относят следующие:
-
+ операция сложения двух чисел:
int a = 10; int b = 7; int c = a + b; // 17 int d = 4 + b; // 11
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 double d = 22.5 / 4.5; // 5.0
При делении стоит учитывать, что если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float или double:
double k = 10 / 4; // 2 System.out.println(k);
Чтобы результат представлял число с плавающей точкой, один из операндов также должен представлять число с плавающей точкой:
double 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; int b = ++a; System.out.println(a); // 9 System.out.println(b); // 9
int a = 8; int b = a++; System.out.println(a); // 9 System.out.println(b); // 8
int a = 8; int b = --a; System.out.println(a); // 7 System.out.println(b); // 7
int a = 8; int b = a--; System.out.println(a); // 7 System.out.println(b); // 8
Приоритет арифметических операций
Одни операции имеют больший приоритет, чем другие, и поэтому выполняются вначале. Операции в порядке уменьшения приоритета:
++ (постфиксный инкремент), — (постфиксный декремент)
++ (префиксный инкремент), — (префиксный декремент)
* (умножение), / (деление), % (остаток от деления)
Приоритет операций следует учитывать при выполнении набора арифметических выражений:
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.
Операции с числами с плавающей точкой
Следует отметить, что числа с плавающей точкой не подходят для финансовых и других вычислений, где ошибки при округлении могут быть критичными. Например:
double d = 2.0 - 1.1; System.out.println(d);
В данном случае переменная d будет равна не 0.9, как можно было бы изначально предположить, а 0.8999999999999999. Подобные ошибки точности возникают из-за того, что на низком уровне для представления чисел с плавающей точкой применяется двоичная система, однако для числа 0.1 не существует двоичного представления, также как и для других дробных значений. Поэтому в таких случаях обычно применяется класс BigDecimal, который позволяет обойти подобные ситуации.
Сложение 2 чисел типа short в Java
Хотя казалось бы, почему — сложение двух чисел одного типа. Но такой код, как ни странно, работает без ошибок:
short x1 = 5, x2 = 38; x1 += x2; System.out.println(x1);
Отслеживать
задан 28 дек 2016 в 12:46
8,900 11 11 золотых знаков 31 31 серебряный знак 55 55 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Любые арифметические операции над типом short на выходе дают int (результат автоматически кастуется в int). В случае же с x1 += x2 по факту происходит x1 = (short) (x1 + x2)
- если одно из чисел double, то в double
- иначе, если одно из чисел float, то в float
- иначе, если одно из чисел long, то в long
- иначе, оба числа преобразуются в int
Отслеживать
ответ дан 28 дек 2016 в 12:59
V. Makhnutin V. Makhnutin
1,050 10 10 серебряных знаков 20 20 бронзовых знаков
Согласно спецификации Java SE 8 Edition (15.26.2 Compound Assignment Operators)
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
то есть имеет место явное приведение типа правого выражения к типу левого выражения
E1 = (T) ((E1) op (E2)) ^^^^
Для вашего примера данное предложение
x1 += x2;
эквивалентно согласно приведенной цитате следующему предложению
x1 = ( short )( x1 + x2 );
Для не составного оператора присваивания такого явного приведения типов нет, а потому вы сами должны применять явное приведение типов, если таковое требуется, и в данном примере
short x1 = 5, x2 = 38; x1 = x1 + x2;
так как тип выражения x1 + x2 является int а левый операнд имеет тип short , то есть имеет место «сужение» значения то следует написать
short x1 = 5, x2 = 38; x1 = ( short )( x1 + x2 );
Думаю, что будет важно отметить для расширения кругозора, что тоже самое правило имеет место и в C#. То есть в отношении этой операции Java и C# ведут себя одинаково. Данный код
short x1 = 5, x2 = 38; x1 = x1 + x2;
также не будет компилироваться в C#, тогда как данный код
short x1 = 5, x2 = 38; x1 += x2;
успешно скомпилируется, так как возможно явное преобразование из типа int в тип short .
Как складывать два числа в java
Сложить два числа в Java можно при помощи оператора сложения + :
var a = 10; var b = 7; var sum1 = a + b; // 17 var sum2 = 20 + b; // 27
Сложить два числа из единственной строки
Задание:
Во входном потоке в единственной строке через пробел записаны два целых числа. В выходной поток следует записать единственное целое число — сумму чисел.
Вызывает затруднение записи именно в одну строку, и разделение этой строки на два числа. Запись в две переменные через Enter я смог реализовать, но не в одну строку.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Input first number: "); int a = in.nextInt(); System.out.print("Input second number: "); int b = in.nextInt(); System.out.println(a+b); } }
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
В единственной строке задаются два целых числа X и Y (1
Входные данные. В единственной строке задаются два целых числа X и Y (1<= X; Y<= 10^18). Выходные.
Сложить два числа, как две строки (25 + 25 = 2525)
Помогите написать программу желательно попроще) Приписать к числу n. такое же число n Например.

В единственной строке входного файла INPUT.TXT записаны два натуральных числа через пробел. Нужно найти их сумму
#include "pch.h" #include <iostream> #include <fstream> using namespace std; int main()
Как сложить два плюс два? если оба числа символьные?
Не могу сложить два числа в символьном виде, что бы получить третье (как сумма двух первых).