2017-02-19 33 views
-1

Добавление:Поведение при сложения и вычитания в Java

System.out.println ('3' + '1');

выход: 52 (я считаю, что это происходит из-за значений ASCII)

Вычитание:

System.out.println ('3' - '1');

выход: 2

Вопрос: Поскольку это принимает значение ASCII для добавления, но почему это происходит фактическое значение Вычитание, может кто-нибудь пожалуйста помочь в этом?

+0

Вы даже запустили этот код? Я вставил точные две строки, которые у вас есть, и не получил тот же результат, что и вы. – nhouser9

+0

Могу ли я узнать, какой результат вы получаете ...? – Prasanth2617

+0

@ Prasanth2617 он должен быть точно таким же, как и вы. –

ответ

0

Это согласовано. Значение ASCII от 3 составляет 51 и 1 49.

поэтому Ваше первое выражение 51 + 49 = 100

И ваш второй один 51 - 49 = 2. Смешное совпадение: ответ такой же, как если бы это были числа, а не символы!

Редактировать Я вижу, что вы получили 52 для первого выражения. Это то, что вы получили бы, если бы вы написали System.out.println('3' + 1); (без котировок вокруг второго символа), так как ASCII 51 + int 1 = 52.

+0

Большое спасибо .. !!! @hughjdavey я не заметил, независимо от числа или char они дали тот же ответ .. !!! :) :) – Prasanth2617

+0

Нет проблем. Не могли бы вы поддержать и принять ответ, если он ответил на ваш вопрос :) – hughjdavey

+2

Вы также можете получить 52 из-за отсутствия цитат вокруг второго символа; '3 + '1'' равно 3 + 49 равно 52. –

1

Ваша догадка правильна, что для добавления требуется значение ASCII. Также требуется значение ASCII для вычитания.

Но sout ('3' + '1') дает ответ = 100. (поскольку значение ASCII 3 равно 51, а значение ASCII для 1 равно 49).

И sout ('3' - '1'), дает ответ = 2.

+0

Спасибо за помощь Дипак .. !!! :) :) – Prasanth2617

0

Во-первых, char является кодовым модулем UTF-16, UTF-16 является одним из нескольких кодировок для набора символов Unicode.

Для диапазонов символов U + 0000 - U + D7FF и U + E000 - U + FFFF, UTF-16 кодирует их в одном блоке кода (char) со значениями '\ u0000' to '\ uD7FF' и ' \ uE000 'to' \ uFFFF. Таким образом, в пределах этих диапазонов char можно считать полным символом.

Теперь, в некоторых диапазонах кода, порядок иногда полезен: цифры от 0 'до' 9 'и базовые латинские буквы' А 'до' Z 'и' a 'до' z 'находятся в натуральном порядке.

Итак, в таких случаях вы можете использовать вычитание для определения «расстояния» между значениями. '3' - '1' = 2 означает, что «3» находится за пределами «1».

(Заманчиво применять эту логику и к буквам. Однако, поскольку алфавиты различаются по языку, гораздо проще использовать строку, чтобы дать упорядочение алфавиту, например, «ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ».)

Добавление символов не является чем-то, что я могу придать значение ('3' + '1'), хотя это разрешено, потому что char может быть неявно или явно преобразован между целыми числами (код UTF-16 стоимость единицы).