Le type de caractère peut-il être catégorisé comme un entier?

Je viens tout juste de lire “char est le seul type primitif intégral non signé en Java”. Cela signifie-t-il que le caractère est l’un des types intégraux en Java?

Comme en C, j’ai lu récemment que les types C comprenaient les types scalaires, les types de fonction, les types d’union, les types d’agrégats et que les types scalaires comprenaient les types de pointeur et les types arithmétiques, puis que les types arithmétiques comprenaient les types intégraux et les types à virgule flottante, les types inclure des types énumérés et des types de caractères.

Le type de caractère peut-il vraiment être classé comme un entier à la fois en Java et en C?

Oui, un caractère est un type intégral dans toutes les langues populaires dans lesquelles il apparaît. “Intégrale” signifie que son spectre est discret et que la plus petite différence entre deux valeurs distinctes est 1 . La plage requirejse des valeurs sockets en charge est généralement assez petite comparée à celle d’autres types d’intégrale. Le matériel informatique considère traditionnellement les entiers comme le type de données fondamental; en revanche, les types arithmétiques à virgule flottante sont un ajout plus récent et plus compliqué.

Similaire à la réponse de @ aioobe

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

ou l’inverse

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

ou l’inhabituel

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

ou l’intrus

 char ch = '0'; ch *= 1.1; // '4' as (char) (48 * 1.1) == '4' ch %= 16; // `\u0004` int i = ch; // 4 

BTW: à partir de Ssortingng.hashCode ()

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

Selon le didacticiel Java Primitive Data Types :

char : le type de données char est un seul caractère Unicode 16 bits. Il a une valeur minimale de ‘\ u0000’ (ou 0) et une valeur maximale de ‘\ uffff’ (ou 65 535 inclus).

Alors oui, il s’agit d’un entier non signé de 16 bits. Que vous utilisiez le type pour représenter un nombre ou un caractère dépend de vous …


Gardez également à l’esprit que, bien que le type de caractère soit garanti à 16 bits en Java, la seule ressortingction imposée par C est que le type doit être d’au moins 8 bits. Selon la référence de spécification C de cette réponse :

nombre maximal de bits pour le plus petit object qui n’est pas un champ de bits (octet)

CHAR_BIT 8

Ainsi, un caractère en C ne représente pas nécessairement la même plage de valeurs entières qu’un caractère en Java.

Je ne suis pas sûr de la définition formelle d’un type intégral , mais en bref, oui, char est un type intégral en Java, car il peut être vu comme représentant un entier.

Vous pouvez par exemple faire

 char c1 = 'a' + 'b'; char c2 = 5; char c3 = c2 + 3; int i = c3; char c4 = (char) i; 

etc.

En mémoire, essentiellement tout est intégral … mais oui. char est un type entier en C, C ++ et Java.

La spécification C appelle le type de caractère à implémenter sous la forme d’un entier de 1 octet. Les spécifications pour les autres types ne sont pas toujours aussi claires. Par exemple, le livre original de Kernigan et Ritchie C indiquait que, pour ce qui est du court et du long , parmi différentes implémentations, vous ne pouviez compter que sur le fait que le court n’était pas plus long que long .