Можно ли классифицировать тип char как целое число?

Как раз сейчас я читаю "char является единственным неподписанным интегральным примитивным типом в Java". Означает ли это, что char является одним из интегральных типов в Java?

Как и в C, недавно я прочитал, что типы C включают в себя скалярные типы, типы функций, типы объединения, типы агрегатов и скалярные типы включают типы указателей и арифметические типы, тогда арифметические типы включают в себя интегральные типы и типы с плавающей точкой, интегральные типы включают перечисляемые типы и типы символов.

Может ли тип char быть категоризирован как целое число как в Java, так и в C?

Ответ 1

Да, a char является интегральным типом во всех популярных языках, на которых он появляется. "Интеграл" означает, что его спектр дискретен и наименьшая разница между любыми двумя различными значениями равна 1. Требуемый диапазон поддерживаемых значений обычно невелик по сравнению с другими интегральными типами. Компьютерное оборудование традиционно рассматривает целые числа как основной тип данных; напротив, арифметические типы с плавающей запятой являются более новым и более сложным дополнением.

Ответ 2

Подобно @aioobe answer

int n = 5;
char ch = (char) '0' + 5; // '5'

или наоборот

char ch = '9';
int i = ch - '0'; // 9

или необычный

char ch = 'a';
ch += 1; // 'b';

или нечетное

char ch = '0';
ch *= 1.1; // '4' as (char) (48 * 1.1) == '4'

ch %= 16; // `\u0004`
int i = ch; // 4

BTW: Из String.hashCode()

// int h = 0;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
    h = 31*h + val[off++];
}

Ответ 3

В соответствии с Java Примитивные типы данных:

char: Тип данных char - это один 16-разрядный символ Юникода. Он имеет минимальное значение '\ u0000' (или 0) и максимальное значение '\ uffff' (или 65 535 включительно).

Итак, это 16-разрядное целое число без знака. Используете ли вы тип для представления числа или символа, зависит от вас...


Также имейте в виду, что, хотя тип char гарантированно будет 16 бит в Java, единственным ограничением C является то, что тип должен быть не менее 8 бит. В соответствии с ссылкой C spec из этого ответа:

максимальное количество бит для наименьшего объекта, не являющегося битовым полем (байт)

CHAR_BIT 8

Таким образом, a char в C не обязательно представляет один и тот же диапазон целых значений как char в Java.

Ответ 4

Я не уверен в формальном определении интегрального типа, но, короче говоря, да, char является интегральным типом в Java, поскольку его можно рассматривать как представляющее целое число.

Вы можете, например, сделать

char c1 = 'a' + 'b';

char c2 = 5;

char c3 = c2 + 3;

int i = c3;
char c4 = (char) i;

и т.д.

Ответ 5

В памяти, по сути, все интегрально... но да. char - целочисленный тип в C, С++ и Java.

Ответ 6

Спецификация C требует, чтобы тип char был реализован как целое число в 1 байтовое число. Спецификации для других типов не всегда настолько ясны. Например, в оригинальной книге Kernigan и Ritchie C сказано, что в отношении коротких и длинных, среди разных реализаций, вы можете полагаться только на то, что short не больше long.