Как складывать два числа в java
Сложить два числа в Java можно при помощи оператора сложения + :
var a = 10; var b = 7; var sum1 = a + b; // 17 var sum2 = 20 + b; // 27
Сложение 2 чисел типа short в Java
Хотя казалось бы, почему — сложение двух чисел одного типа. Но такой код, как ни странно, работает без ошибок:
short x1 = 5, x2 = 38; x1 += x2; System.out.println(x1);
Отслеживать
задан 28 дек 2016 в 12:46
8,910 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 ?
К примеру есть число int — 11111010 и к нему нужно сложить по правилам сложения двоичных чисел число :
00000001 . Как это сделать ?
- Вопрос задан более трёх лет назад
- 6333 просмотра
Комментировать
Решения вопроса 1

Integer.toBinaryString(Integer.parseInt("11111010", 2) + Integer.parseInt("00000001", 2))
Ответ написан более трёх лет назад
Нравится 3 3 комментария

надо давать человеку самому подумать

Роман: а кто ему не дает? пусть думает.
Иван Грозный @warriorkg Автор вопроса
Роман: Тут нужно знать язык, а не думать. Я только начинаю изучать JAVA и поэтому еще не знаю таких фишек, а если вручную слагать числа — это адские муки, поверьте. Я пытался
Ответы на вопрос 1
Если у вас число уже int, то берёте и складываете оператором сложения («+» для тех, кто математику прогуливал).
Иначе переводите своё (скорее всего) строковое представление в int, long или BigInteger, и работаете уже с ним.
Ответ написан более трёх лет назад
Нравится 5 3 комментария
Иван Грозный @warriorkg Автор вопроса
Мне нужно вывести число -5. Я его перевел в двоичный вид( это нулики и единички, если кто не знает) и сохранил в int ( к сожалению в java нету типа данных для двоичных чисел и арифметики), поэтому мне нужно сложить два числа типа int по правилам сложения двоичных чисел, чтобы сохранить результат в string и вывести на экран
Иван Грозный @warriorkg Автор вопроса
Sirikid: Я об этом и говорю. Что нету таких вещей. Я в курсе, что все числа не только в JAVA , а вообще в компьютере представлены нулями и единичками ( двоичным кодом). Я и спрашивал как можно сложить двоичные числа. И ответ получил
Иван Грозный: в ответе складываются обычные Integer. Просто они парсятся из строкового представления, о чём я вам в самом начале написал.
Задача: сложить двоичные числа, представленные в виде строк
Решаем задачи, которые дают программистам на собеседованиях в IT-компаниях. Сегодня складываем двоичные числа.


Иллюстрация: Polina Vari для Skillbox Media

Дмитрий Зверев
Любитель научной фантастики и технологического прогресса. Хорошо сочетает в себе заумного технаря и утончённого гуманитария. Пишет про IT и радуется этому.

Сергей Голицын
Senior Java Developer в Covalent Inc. и преподаватель. Больше семи лет в Java-разработке. В свободное время судит хакатоны и делится опытом с начинающими программистами. Пишет статьи для «Хабра» и Medium. Ведёт телеграм-каналы «Полезные ссылки около Java» и Cracking code interview.
Условие. Даны два двоичных числа в виде строк a и b. Нужно вернуть их суммы в виде строки.
Ввод и вывод. Пример 1
Ввод: a = "11", b = "1" Вывод: "100"
Ввод и вывод. Пример 2
Ввод: a = "1010", b = "1011" Вывод: "10101"
Задача и решения взяты из Telegram-канала Сергея Cracking code interview.
Решение
Чтобы решить эту задачу, мы должны начать с конца и посимвольно складывать цифры. Создадим два указателя — для каждой из строк. На старте они будут ссылаться на последние символы строк. Теперь просто пойдём с конца строк к началу, уменьшая значения указателей на один.
Главная проблема здесь — не забыть о числах, которые переносятся в следующий разряд. А ещё нужно помнить, что одна строка может быть длиннее другой. В этом случае придётся добавить оставшиеся символы из более длинной строки к результату.
Чтобы работать со строками было удобно, я использовал StringBuilder. В Java это самый эффективный способ для операций на изменение строк.
Вот как алгоритм будет реализован на Java:
public String addBinary(String aa, String bb) < char[] aChars = aa.toCharArray(); char[] bChars = bb.toCharArray(); int rest = 0; int readerA = aChars.length - 1; int readerB = bChars.length - 1; StringBuilder sb = new StringBuilder(); while (readerA >= 0 && readerB >= 0)< int a = aChars[readerA] - '0'; int b = bChars[readerB] - '0'; int sum = a + b + rest; rest = sum/2; sb.append(sum % 2); readerA--; readerB--; > while(readerA >= 0)< int a = aChars[readerA] - '0'; int sum = a + rest; rest = sum/2; sb.append(sum % 2); readerA--; > while(readerB >= 0)< int b = bChars[readerB] - '0'; int sum = b + rest; rest = sum/2; sb.append(sum % 2); readerB--; > if (rest != 0) < sb.append(rest); >return sb.reverse().toString(); >
Временная сложность: O(n) — так как мы перебирали все символы в строках.
Ёмкостная сложность: O(1) — нам нужно заранее определённое количество памяти (максимальный размер памяти — две строки).
Читайте также:
- Задача на бинарное дерево: как инвертировать дерево и вернуть полученный массив
- Как джуну понять, что надо увольняться из компании и роста не будет
- Что такое баги, ворнинги и исключения в программировании