1. Encodage octal

En parlant d'encodages... Comme vous le savez, dans la vie de tous les jours on utilise la notation décimale : tous nos nombres sont représentés par 10 symboles : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Il y en a 10 chiffres, donc le système est appelé décimal.

Mais les programmeurs sont de grands inventeurs. Ils ont immédiatement proposé des encodages qui utilisent un nombre différent de symboles. Par exemple, 16, 8 et 2.

L'encodage alternatif qui utilise 8 symboles est le plus simple : supprimez simplement le 8 et le 9 et vous obtenez un encodage octal (le système numérique octal ).

Et, oui, vous pouvez utiliser le système octal pour spécifier des littéraux numériques. Si, bien sûr, vous en avez vraiment besoin. C'est plus facile qu'il n'y paraît. Il vous suffit d'écrire le chiffre 0 avant le chiffre.

En d'autres termes, Java traite tout littéral entier commençant par 0 comme une valeur octale.

Exemples:

Code Remarques
int x = 015;
x est 13 : 1*8+5
int x = 025;
x est 21 : 2*8+5
int x = 0123;
x vaut 83 : 1*64+2*8+3 == 1*8 2 +2*8 1 +3*8 0
int x = 078;
Cela ne compilera pas : 8 n'est pas l'un des symboles utilisés dans l'encodage octal.

Il est peu probable que vous ayez besoin d'écrire des nombres octaux dans votre code, mais vous devez savoir ce qu'ils sont. Après tout, vous devrez lire du code écrit par d'autres. Et comme mentionné ci-dessus, les programmeurs sont de grands inventeurs.

Eh bien, rappelez-vous que vous ne pouvez pas simplement écrire 0 devant chaque nombre.



2. Encodage binaire

L'encodage binaire est encore plus intéressant. Si l'octal n'a que les chiffres 0-7, alors le binaire n'a que 0 et 1. Pourquoi cet encodage est-il nécessaire ?

Cela a tout à voir avec la structure interne d'un ordinateur. Tout dans un ordinateur fonctionne à l'électricité, et il se trouve que le moyen le plus efficace de stocker et de transmettre quelque chose en utilisant l'électricité est d'utiliser deux états : soit il n'y a pas d'électricité dans le fil (zéro) et il y a de l'électricité (un).

C'est l'origine de la popularité du système numérique binaire.

En principe, il n'est pas très souvent utilisé en Java : Java est considéré comme un langage de haut niveau, complètement abstrait du matériel sur lequel il s'exécute. En effet, vous souciez-vous vraiment du format utilisé pour stocker et traiter les données à l'intérieur d'un ordinateur ?

Mais au cours des dernières décennies, les programmeurs en sont venus à aimer l'encodage binaire (et d'autres encodages basés sur celui-ci). Par conséquent, Java a des opérateurs qui prennent des nombres binaires comme entrées. Et la précision des nombres à virgule flottante dépend de leur représentation binaire.

Fondamentalement, il vaut mieux que vous connaissiez cet encodage que de ne pas le savoir.

Et comme c'était le cas avec l'encodage octal, Java a un moyen d'encoder les littéraux en utilisant le système binaire. C'est-à-dire des littéraux composés uniquement de 0 et de 1. Pour que le compilateur Java comprenne que le code contient un littéral numérique codé en binaire plutôt qu'un simple nombre décimal composé de zéros et de uns, tous les littéraux binaires sont identifiés à l'aide du préfixe 0b (le 'b' vient du mot binaire) .

Exemples:

Code Remarques
int x = 0b100;
х vaut 4 : 1*4+0*2+0
int x = 0b1111;
х vaut 15 : 1*8+1*4+1*2+1
int x = 0b1111000111;
х vaut 967 : 1*2 9 +1*2 8 +1*2 7 +1*2 6 +0*2 5 +0*2 4 + 0*2 3 + 1*2 2 + 1*2+1 ;
int x = 0b12000;
Cela ne compilera pas : 2 n'est pas l'un des symboles utilisés dans l'encodage binaire.


3. Encodage hexadécimal

En plus des codages octal et binaire, les littéraux peuvent également être écrits en hexadécimal. C'est un encodage très populaire.

En effet, bien que la notation binaire soit aussi proche que possible de la façon dont les nombres sont réellement stockés, il est trop difficile pour les humains de travailler efficacement avec de tels nombres : en binaire, le nombre un million contient 20 chiffres, pas 7.

C'est pourquoi les programmeurs ont inventé le système hexadécimal. Après tout, 16 est égal à 2 élevé à la puissance 4 , donc exactement 4 bits correspondent à un chiffre hexadécimal. En gros, tous les 4 bits peuvent désormais être écrits sous la forme d'un seul chiffre hexadécimal.

L'encodage hexadécimal a également son propre préfixe unique : 0x . Exemples:

Nombre décimal Notation binaire Notation hexadécimale
17 0b 0001 0001 0x 1 1
4 1 0b 0010 1 00 1 0x 2 9
85 0b 0101 0101 0x 5 5
256 0b 1 0000 0000 0x 1 0 0

Ok, vous dites, c'est assez clair comment nous avons obtenu le système octal : nous venons de jeter les nombres 8 et 9, mais où obtenons-nous les 6 symboles supplémentaires pour le système hexadécimal ? J'aimerais les voir!

Tout est simple. Les 6 premières lettres de l'alphabet anglais ont été prises comme les 6 symboles manquants : A (10), B (11), C (12), D (13), E (14), F (15).

Exemples:

Notation hexadécimale Notation binaire Nombre décimal
0x 1 0b 0000 0001 1
0x 9 0b 0000 1001 9
0x A 0b 0000 1010 dix
0xB _ 0b 0000 1011 11
0xC _ 0b 0000 1100 12
0x J 0b 0000 1101 13
0xE _ 0b 0000 1110 14
0xF _ 0b 0000 1111 15
0x 1F _ 0b 0001 1111 31
0x A F 0b 1010 1111 175
0x F F 0b 1111 1111 255
0x F F F 0b 1111 1111 1111 4095


4. Comment convertir un nombre en hexadécimal

Convertir un nombre hexadécimal en décimal est très simple. Disons que vous avez le nombre 0 x A F C F . Combien cela fait-il en décimal ?

Tout d'abord, nous avons un système de numérotation positionnel, ce qui signifie que la contribution de chaque chiffre au nombre total augmente d'un facteur de 16 lorsque nous nous déplaçons de droite à gauche :

UNE * 16 3 + F * 16 2 + C * 16 1 + F

Le symbole A correspond au chiffre 10, la lettre C correspond au chiffre 12 et la lettre F représente quinze. On a:

10 * 16 3 + 15 * 16 2 + 12 * 16 1 + 15

En élevant 16 aux différentes puissances qui correspondent aux chiffres, on obtient :

10 * 4096 + 15 * 256 + 12 * 16 + 15

On résume tout et on obtient :

45007

Vous savez comment ce numéro est stocké en mémoire :

0x A F C F

Mais maintenant, convertissons-le en binaire. En binaire ce serait :

0b 1010 1111 1100 1111

Chaque ensemble de quatre bits correspond exactement à un caractère hexadécimal. C'est super pratique. Sans aucune multiplication ni exponentiation."