Convertir un nombre décimal en binaire avec Excel
par
, 06/10/2021 à 08h00 (2640 Affichages)
Salut.
DECBIN(Valeur) convertit une valeur décimale en valeur binaire... DECBIN(145) = 10010001. DECBIN permet l'expression binaire d'une valeur négative, mais se comporte pour moi assez bizarrement. En effet, il est limité à 9 bits (10 pour un nombre négatif, le bit de poids fort étant à 1 et le nombre négatif étant exprimé en notation complément à 2).
Cette limitation entraîne dans les faits que la plage utilisable est -512 à +511... DECBIN(512) renvoie 0.
Et si on faisait sauter cette limite avec EXCEL 365?
Si DECBIN est limité à la plage [-512,511], DECHEX, lui, n'est pas limité, ou presque* => DECHEX(4256895412) = FDBB11B4. Et ça, c'est plutôt chouette, puisque chaque caractère hexadécimal tient sur 4 octets. Par exemple, 60043dec = 1110101010001011bin. Et 60043dec = EA8Bhex... Et si on écrit chaque lettre de valeur hexa en binaire, on a 1110 1010 1000 1011bin...
Et en Exel365, on a JOINDRE.TEXTE qui permet de concaténer des matrices. On a aussi LET, qui permet de déclarer des variables qui seront utilisées dans la formule.
Voilà dès lors une chouette formule: =LET(V;DECHEX(C1);JOINDRE.TEXTE("";VRAI;HEXBIN(STXT(V;LIGNE(INDIRECT("a1:a" & NBCAR(V)));1);4)))
Explications
- DECHEX(C1) traduit la valeur de C1 en hexadécimal;
- Grâce à LET, on stocke cette valeur dans la variable V;
- LIGNE(INDIRECT("a1:a" & NBCAR(V))) va permettre de boucler sur le nombre de caractères de la valeur hexadécimale (la variable V calculée par LET en début de formule);
- HEXBIN(STXT(V;LIGNE(INDIRECT("a1:a" & NBCAR(V)));1);4) va convertir chaque caractère hexa en binaire sur 4 bits en bouclant grâce à LIGNE(...);
- JOINDRE.TEXTE("";VRAI;HEXBIN(STXT(V;LIGNE(INDIRECT("a1:a" & NBCAR(V)));1);4)) va concaténer les résultats de chaque boucle.
Et voila. On a fait sauter la limite...
* La plage des valeurs admises pour DECHEX est [-549 755 813 888,549 755 813 887]
.