Вычисление с переменной char в Java

1

У меня есть задание для школы, и одна из задач - объяснить множество крошечных вычислений и объяснить, почему Java дает вам результат, который он дает вам.

и один из расчетов:

1 + '2' + 3

который для меня дает лексическую ошибку, поскольку учитель использовал неправильные "апострофы" для моей системы, но я говорил с другими студентами, и они сказали мне, что они получили фактический результат, поэтому я начал читать об этом и узнал что он должен обозначать переменную char, и я также узнал о типах системы, поэтому я изменил знаки для работы в моей системе, и теперь я получаю ответ 54..

и я не вижу в ней логики, и я попытался добавить/вычислить/математику google с переменными char и не нашел ничего, что объясняет это хорошо..

Поэтому я обращаюсь к вам, людям с кодированием, что однажды я мог бы помочь мне понять логику этого.

это началось как домашнее задание, которое, вероятно, я мог бы получить, просто ответив, что он дает лексическую ошибку, потому что мой компилятор не понимает символ, но теперь он достиг своего пика моего любопытства, и я действительно хочу знать, как java справляется с получить этот ответ..

спасибо за любую помощь по этому вопросу! :)

Я вижу, что я не могу сделать тег "домашняя работа", поэтому надеюсь, что все в порядке, я положил его сюда :)

  • 0
    stackoverflow.com/questions/3680625/...
  • 0
    возможный дубликат преобразования int в char в java
Показать ещё 1 комментарий
Теги:
math
char
apostrophe

2 ответа

2
Лучший ответ

В Java char имеет прямое сопоставление с int UTF-16. Однако для большинства обычных символов приведение значения char к int приводит к его индексу в таблице ascii. + - это не операция с символами, но это операция для int. Поэтому java берет 2 и, думая "я не могу добавить это", понимает, что он может добавить его, если он передает его в int. Изображение 174551

Как видно из таблицы, "2" имеет индекс 50, таким образом, 1 + 50 + 3 = 54.

  • 0
    Этот! хаха, так вот почему! Большое вам спасибо, это очень хорошо объясняет! это означает, что я буду хорошо спать сегодня вечером .. еще раз спасибо!
  • 0
    Нет проблем! Примите ответ, когда сможете!
Показать ещё 3 комментария
0

Символы - это, по сути, цифры. Компьютер преобразует символ в целое число с помощью набора символов (charset). Оболочки - это таблицы, которые связывают указанный символ с указанным целым числом, поэтому ваш компьютер может преобразовать его в двоичный код и сохранить его в памяти. Позже, когда это необходимо, это число может быть преобразовано обратно в характер. Ваш компилятор использует Unicode (надмножество ASCII, спасибо Tom Blodget), поэтому символ "2" на самом деле является десятичным целым числом 50 (подробнее: http://unicode-table.com/en/, обратите внимание, что таблица использует шестнадцатеричные числа, поэтому шестнадцатеричный 32 равен десятичному значению 50). Поскольку добавление по умолчанию возвращает целое число, символ преобразуется и добавляется, но никогда не преобразуется обратно в его исходную форму.

Что касается того, почему он дает ошибку, это, вероятно, потому, что Java отличается между типами и вашим компилятором (или тем, что бросает ошибку) является более строгим. Не верьте мне на слово, вам, вероятно, следует взглянуть на стандарт и вашу реализацию. В C, например, это дополнение всегда будет успешным.

Надеюсь, это немного облегчит ситуацию.

  • 0
    Компилятор не использует ASCII. Смотрите мой комментарий к этому ответу .
  • 0
    Забыл об этом, спасибо (и я пишу выходные строки для приложений на моем родном языке, которые используют несколько символов не ASCII). Исправил ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню