Maison >Problème commun >Combien d'octets le type char occupe-t-il ?
Le type char occupe 1 octet en C ou C++ et 2 octets en java. char est utilisé en C ou C++ pour définir des variables de caractères, et le type de données char est un type entier et n'occupe que 1 octet. En Java, le type char occupe 2 octets car le compilateur Java utilise le codage Unicode par défaut, donc 2 octets (16 bits) peuvent représenter tous les caractères.
L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.
J'ai recherché sur Baidu "combien d'octets char occupe-t-il" et j'ai obtenu la réponse suivante :
Char est utilisé pour définir des variables de caractère en C ou C++. C'est un type entier et n'en occupe qu'un. octet, la plage de valeurs est de -128 ~ +127 (-27 ~ 27-1).
Le type char occupe 1 octet, soit 8 bits. L'entier positif qui peut être stocké est 0111 1111, soit 127.
Évidemment, ce n'est pas le résultat que nous souhaitons, j'ai donc continué à chercher "Combien d'octets occupe char en java ?"
Char en Java est un type de données utilisé pour stocker des caractères, occupant 2 octets , utilisant le codage Unicode, ses 128 premiers octets de codage sont compatibles avec ASCII, mais certains caractères nécessitent deux caractères pour être représentés.
Pourquoi les caractères en C ou C++ et Java occupent-ils un nombre d'octets différent ?
Qu'est-ce que cela signifie que certains personnages nécessitent deux caractères pour être représentés ?
Codage
Avant d'aborder cette question, commençons par vulgariser quelques points de connaissances.
Tout d'abord, nous savons tous que les informations stockées dans l'ordinateur sont représentées par des nombres binaires, alors comment laisser l'ordinateur stocker les caractères chinois ou anglais que nous, les humains, utilisons ?
Par exemple, comment convertir « a » en binaire et le stocker dans l'ordinateur s'appelle encodage ;
Et analyser et afficher les nombres binaires stockés dans l'ordinateur s'appelle décodage.
Jeu de caractères
Caractère (Caractère) est un terme général désignant divers caractères et symboles, notamment divers caractères nationaux, signes de ponctuation, symboles graphiques, chiffres, etc. Un jeu de caractères (Jeu de caractères) est une collection de plusieurs caractères. Il existe de nombreux types de jeux de caractères, et chaque jeu de caractères contient un nombre différent de noms de jeux de caractères courants : jeu de caractères ASCII, jeu de caractères GB2312, jeu de caractères BIG5. Jeu de caractères GB18030, jeu de caractères Unicode, etc. C'est l'explication donnée par Baidu Encyclopedia. Quoi qu'il en soit, un jeu de caractères est une collection de caractères, et le nombre de caractères dans un jeu de caractères est également différent. Pour qu'un ordinateur puisse traiter avec précision du texte dans différents jeux de caractères, un codage de caractères est nécessaire afin que l'ordinateur puisse reconnaître et stocker divers textes.
unicode
Son nom est Unicode, également appelé Code Universel. Le nombre de symboles est en constante augmentation et a dépassé le million.
Avant la création d'Unicode, il existait des centaines de systèmes d'encodage. Aucun encodage ne peut contenir suffisamment de caractères. Comme son nom l'indique, il s'agit d'un encodage de tous les symboles. Chaque symbole reçoit un encodage unique, de sorte que le problème de code tronqué causé par différents encodages disparaîtra.
La plupart des ordinateurs utilisent l'ASCII (American Standard Code for Information Interchange), qui est un système de codage sur 7 bits qui représente toutes les lettres majuscules et minuscules, les chiffres, les signes de ponctuation et les caractères de contrôle. Unicode contient des codes ASCII et « u0000 » à « u007F » correspondent aux 128 caractères ACSII.
Je ne peux m’empêcher de penser que seuls ceux qui ont de la force peuvent établir des normes. Unicode n'est qu'un jeu de symboles. Il spécifie uniquement le code binaire du symbole. Il fournit uniquement le mappage entre les caractères et les nombres, mais ne précise pas comment ce code binaire doit être stocké. Nous savons que le nombre de lettres anglaises est très petit et peut être représenté par un octet, mais le nombre de symboles chinois en Unicode est très grand et un octet ne peut pas être utilisé du tout. En conséquence, diverses méthodes d'implémentation pour le stockage de caractères Unicode sont apparues plus tard, telles que UTF-8, UTF-16, etc. UTF-8 est l'implémentation Unicode la plus utilisée sur Internet.
Code interne et code externe
Nous disons souvent que char en java occupe plusieurs octets, qui devraient être char dans le code interne en java.
Le code interne fait référence à la méthode de codage des caractères et des chaînes en mémoire lorsque Java est en cours d'exécution ; le code externe est le codage des caractères utilisé en externe lorsque le programme interagit avec le monde extérieur, comme la technologie de sérialisation. Le code étranger peut être compris comme suit : tant qu'il ne s'agit pas d'un code interne, c'est un code étranger. Il convient de noter que la méthode d'encodage dans le fichier de code objet (fichier exécutable ou fichier de classe) généré par la compilation du code source appartient au code étranger. Le code interne de la JVM utilise UTF16. Le 16 en UTF-16 fait référence à l'unité minimale de 16 bits, c'est-à-dire que deux octets forment une unité. Au début, UTF16 était codé à l'aide d'une méthode de longueur fixe sur 2 octets. Deux octets peuvent représenter 65 536 symboles (en fait, cela peut en réalité représenter moins que cela), ce qui était suffisant pour représenter tous les caractères Unicode à cette époque. Cependant, avec l'augmentation du nombre de caractères dans Unicode, 2 octets ne peuvent pas représenter tous les caractères. UTF16 utilise 2 octets ou 4 octets pour terminer l'encodage. Pour faire face à cette situation, Java utilise une paire de caractères pour représenter les caractères nécessitant 4 octets, en tenant compte des exigences de compatibilité ascendante. Par conséquent, char en Java occupe deux octets, mais certains caractères nécessitent deux caractères pour les représenter. Cela explique pourquoi certains caractères nécessitent deux caractères pour les représenter.
De plus : Les fichiers de classe Java utilisent UTF8 pour stocker les caractères, c'est-à-dire que les caractères de la classe occupent 1 à 6 octets. Lors de la sérialisation Java, les caractères sont également codés en UTF8, représentant 1 à 6 caractères.
length()
Alors voici une autre question : Qu'est-ce que le String.length() d'un personnage en Java ?
Après avoir lu les points de connaissances précédents, je n'arrive plus à ouvrir la bouche et la réponse est 1... ...Écrivez une démo et jetez un oeil : Dans l'Année du Tigre, utilisez Tiger pour tester, TigerUTF représente l'encodage Unicode correspondant.
String tiger = "?"; String tigerUTF = "\uD83D\uDC05"; System.out.println(tigerUTF); System.out.println(tiger.length()); System.out.println(tiger.codePointCount(0,tiger.length()));
peut être obtenu en appelant la méthode String.length()
得到的结果为2,表示的是stirng的char数组占UTF-16格式的2个代码单元(即4个字节),而不是有多少个字符。 当然我们想要获取多少个字符,可以使用codePointCount
.
Pour plus de connaissances connexes, veuillez visiter la rubrique FAQ !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!