Aller au contenu principal

Qu'est-ce que la fonction BITDECALD ?

Définition
La fonction BITDECALD décale vers la droite la représentation binaire d'un entier positif d'un nombre de positions donné. Chaque décalage d'une position équivaut à une division entière par 2.

Tu sors BITDECALD (BITRSHIFT en anglais) quand une simple division ne suffit plus, parce que tu dois lire ou reconstruire un nombre bit par bit : décoder un format compact, séparer plusieurs informations tassées dans un même entier, ou reproduire fidèlement ce que ferait ton code bas niveau. C'est le réflexe dès que le problème se pose en binaire plutôt qu'en base 10.

Concrètement, c'est elle qui divise rapidement un index de tableau par 2 à chaque itération d'une recherche dichotomique, qui extrait un octet dans une adresse IP encodée, ou qui isole un champ de bits dans un registre de capteur. Simple, rapide et redoutablement efficace pour les développeurs et ingénieurs qui travaillent au niveau bas.

Syntaxe

=BITDECALD(nombre; décalage)

Clique sur un argument pour aller à son explication.

Si nombre est décimal (ex. 12,7), Excel le tronque automatiquement à 12. Les valeurs négatives ou supérieures à 281 474 976 710 655 (2^48 - 1) provoquent l'erreur #NOMBRE!.

Lucas, la mascotte du Dojo, inspecte les arguments de la fonction à la loupe

Comprendre chaque paramètre de la fonction BITDECALD

BITDECALD prend toujours deux arguments dans cet ordre : d'abord nombre, l'entier dont tu pars, puis décalage, le nombre de crans vers la droite. Les deux sont obligatoires, et aucun n'est facultatif ici. Retiens juste que nombre accepte des valeurs de 0 à 2^48 - 1, tandis que décalage plafonne à 53 : ce sont deux limites différentes qu'on confond facilement.

1

nombre

: le nombre entier dont tu veux décaler les bits vers la droite

Il doit être un entier positif ou nul, compris entre 0 et 281 474 976 710 655 (2^48 - 1). Excel travaille avec la représentation binaire de ce nombre.

Par exemple, 12 en binaire est 1100. =BITDECALD(12; 1) déplace tous les bits d'une position vers la droite et produit 110, soit 6.

2

décalage

: le nombre de positions vers la droite dont tu veux décaler les bits

Il doit être un entier positif ou nul. Chaque décalage d'une position divise le nombre par 2 avec troncature. Un décalage de 3 équivaut à une division entière par 8.

Le décalage maximum accepté est de 53 bits, limite liée à la précision des nombres flottants 64 bits d'Excel.

Lucas, la mascotte du Dojo, fait une démonstration pas à pas de la fonction dans Excel

Exemples pratiques pas à pas

Exemple 1

Comment diviser un nombre par une puissance de 2 avec la fonction BITDECALD

Tu transposes dans Excel un algorithme de recherche dichotomique avant de le coder, et chaque étape de cet algorithme divise un index par 2. Tes registres de test sont listés avec leur valeur de départ et le nombre de crans à appliquer, et tu veux la valeur décalée sur toute la colonne sans la calculer à la main. La fonction BITDECALD pousse les bits vers la droite et te rend exactement ce que ton code bas niveau produira.

Les étapes
  1. 1
    Dans une cellule, écris =BITDECALD(.
  2. 2
    En 1er argument : clique sur la valeur de départ dont tu veux décaler les bits, A2. Elle contient 128, et c'est sa représentation binaire que la fonction déplace, pas le nombre décimal affiché.
  3. 3
    En 2ᵉ argument : clique sur le nombre de crans à parcourir vers la droite, B2. Un seul cran, comme sur cette ligne, revient à diviser par 2, tandis que les 3 crans de la ligne 512 reviennent à diviser par 8.
  4. 4
    Ferme la parenthèse et appuie sur Entrée, puis recopie la formule vers le bas. Les deux références restent relatives, donc chaque ligne repart de sa propre valeur et de son propre nombre de crans.
Au final, ta formule devrait ressembler à ça :=BITDECALD(A2; B2)
Explication
La fonction BITDECALD fait glisser la représentation binaire de 128 (10000000) d'un cran vers la droite : il reste 1000000, soit 64. Chaque cran retiré revient à une division entière par 2, ce qui explique que la ligne 512 avec un décalage de 3 retombe elle aussi sur 64 (512 divisé par 8).
Exemple 2

Comment extraire un champ de bits en combinant la fonction BITDECALD et la fonction BITET

Tu dépouilles les relevés d'un banc de capteurs qui empile plusieurs informations dans un même registre 16 bits, et le mode de fonctionnement occupe les bits 4 à 7. Tu as la valeur décimale brute de chaque registre et tu veux lire ce mode directement dans une colonne, sans convertir en binaire à la main. La fonction BITDECALD ramène le champ en bas du nombre, et un masque ne conserve que lui.

Les étapes
  1. 1
    Dans une cellule, écris =BITET(.
  2. 2
    En 1er argument : écris le décalage qui ramène le champ en bas du registre et referme-le, BITDECALD(A2; 4). Le 4 est la position du premier bit qui t'intéresse, donc le registre complet de A2 glisse de quatre crans et son bit 4 arrive en position 0.
  3. 3
    En 2ᵉ argument : saisis le masque qui borne la largeur du champ, 15. Il vaut 1111 en binaire, soit quatre bits allumés, et la fonction BITET efface tout ce qui dépasse cette largeur.
  4. 4
    Ferme la parenthèse et appuie sur Entrée. Il n'y en a qu'une à fermer, celle de la fonction BITET, puisque la fonction BITDECALD a été refermée dans son propre argument.
Voici la formule que tu obtiens à la fin :=BITET(BITDECALD(A2; 4); 15)
Explication
Décaler de 4 crans amène le bit 4 en position 0, mais tous les bits de poids fort restent accrochés derrière. Le masque 15 (1111 en binaire) coupe ce qui dépasse et ne laisse que les 4 bits voulus. Sur le registre 4660, le champ vaut 3 ; sur 240, dont les bits 4 à 7 sont tous allumés, il vaut 15, la valeur maximale d'un champ de 4 bits.
Exemple 3

Comment éviter l'erreur #NOMBRE! avec la fonction BITDECALD

Les relevés arrivent d'un export automatique et tu ne contrôles pas ce qu'il y a dedans : une valeur négative ou une virgule s'y glisse de temps en temps. Tu veux que ta colonne reste lisible au lieu de se couvrir de codes d'erreur dès qu'une ligne sort des clous. En enveloppant l'appel dans SIERREUR, tu remplaces chaque #NOMBRE! par un mot clair et tu repères les lignes à reprendre.

Les étapes
  1. 1
    Dans une cellule, écris =SIERREUR(.
  2. 2
    En 1er argument : écris le calcul à surveiller et referme-le, BITDECALD(A2; B2). C'est lui qui porte le risque, puisque la fonction BITDECALD renvoie #NOMBRE! sur une valeur importée négative comme le -5 du tableau.
  3. 3
    En 2ᵉ argument : saisis le texte à afficher quand ce calcul échoue, "Erreur". Les guillemets sont indispensables pour qu'Excel traite ces lettres comme du texte et non comme le nom d'une plage.
  4. 4
    Ferme la parenthèse et appuie sur Entrée, puis recopie la formule vers le bas. Le mot de repli ne remplace que les lignes en échec et laisse les résultats valides s'afficher normalement.
Une fois les morceaux assemblés, ta formule donne ça :=SIERREUR(BITDECALD(A2; B2); "Erreur")
Explication
Trois lignes déclenchent l'erreur #NOMBRE! pour trois raisons différentes : -5 est négatif, 12,7 est décimal (la fonction BITDECALD refuse la virgule au lieu de tronquer), et 54 dépasse le décalage maximal de 53. La ligne 255 avec un décalage de 8, elle, renvoie bien 0 : tous les bits sont sortis par la droite, ce qui est un résultat valide et non une erreur.
Le combo gagnant
Décaler seul amène ton champ en position 0 mais laisse traîner les bits du dessus. Marie BITDECALD et BITET avec un masque pour extraire proprement N bits : =BITET(BITDECALD(A1;4);15) isole les bits 4 à 7 (15 vaut 1111 en binaire). C'est le geste clé pour décoder un registre ou éclater une adresse IPv4.
Lucas, la mascotte du Dojo, l'air gêné face à une erreur Excel

Les erreurs fréquentes avec la fonction BITDECALD

Avec BITDECALD, c'est presque toujours le même message qui s'affiche quand quelque chose cloche : #NOMBRE!. Il surgit dès que tu sors du terrain prévu, c'est-à-dire les entiers non signés. Un nombre négatif n'a pas sa place dans le binaire non signé, un décalage au-delà de 53 dépasse la précision des doubles 64 bits, et un nombre plus grand que 281 474 976 710 655 (2^48 - 1) franchit le plafond de la fonction.

Utiliser un nombre négatif

=BITDECALD(-5; 1) retourne #NOMBRE! car la fonction est conçue pour les entiers non signés. Les nombres négatifs ne sont pas représentables dans le modèle binaire non signé d'Excel.

Solution : Vérifie que ton paramètre nombre est bien positif ou nul. Si tu dois gérer des entiers signés, traite le bit de signe séparément avant d'appeler BITDECALD.

Décalage supérieur à 53 provoque #NOMBRE!

Excel limite le décalage à 53 bits (précision des doubles 64 bits). Au-delà, la représentation interne n'est plus fiable et Excel refuse le calcul avec #NOMBRE!.

Solution : Assure-toi que le paramètre décalage est compris entre 0 et 53. Pour les cas limites, note que =BITDECALD(100; 53) retourne 0 car tous les bits ont été éliminés.

Dépasser la limite 2^48 - 1 pour le nombre

Excel limite la valeur de nombre à 281 474 976 710 655 (2^48 - 1). Au-delà, la représentation binaire n'est plus garantie correcte et Excel retourne #NOMBRE!.

Solution : Pour la plupart des usages (registres 32 bits, adresses IPv4), cette limite n'est jamais atteinte. Si tes données dépassent ce seuil, vérifie la source : un nombre aussi grand suggère souvent une erreur de format.

Lucas, la mascotte du Dojo, avec une ampoule, partage des astuces avancées

Astuces avancées avec BITDECALD

1Astuce

Extraire un champ de N bits avec BITET

Décaler seul te place le bon offset en position 0, mais les bits au-dessus restent présents. Combine BITDECALD avec BITET et un masque pour extraire proprement : =BITET(BITDECALD(A1;4);15) extrait les bits 4 à 7 (masque 15 = 1111 en binaire).
Cette technique couvre la quasi-totalité des besoins en décodage de registres ou de formats compacts.

2Astuce

Vérifier l'équivalence avec la division entière

Si tu veux valider tes formules, contrôle que BITDECALD(x; n) donne le même résultat que ENT(x / 2^n) : =SI(BITDECALD(A1;3)=ENT(A1/8);"OK";"Erreur"). Les deux approches sont identiques pour les entiers positifs.
Cette vérification est utile quand tu traduis un algorithme existant en formules Excel.

3Astuce

Décomposer un mot 16 bits en deux octets

Pour extraire l'octet de poids fort et l'octet de poids faible d'un mot 16 bits, utilise =BITDECALD(A1;8) pour le poids fort et =MOD(A1;256) pour le poids faible. Les deux sont complémentaires et couvrent tous les cas sans chevauchement.
C'est la base des conversions réseau little-endian / big-endian dans un classeur Excel.

FAQ

Questions fréquentes

=BITDECALD(nombre; 1) est équivalent à =ENT(nombre/2) pour les entiers positifs : les deux tronquent vers le bas. Décaler de 2 positions divise par 4, de 3 par 8, etc. La différence est sémantique : BITDECALD exprime explicitement une opération binaire, utile quand ton contexte est du traitement bas niveau, des registres ou des protocoles réseau.

Ressources

Pour aller plus loin

Continue sur ta lancée après la fonction BITDECALD : la leçon associée, un modèle prêt à l'emploi et le guide pour progresser.

Tout voir