Перейти к содержимому

Как сложить два числа в java

  • автор:

Как сложить два числа в 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()

Как сложить два плюс два? если оба числа символьные?
Не могу сложить два числа в символьном виде, что бы получить третье (как сумма двух первых).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *