Можно ли классифицировать тип 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.