0Pricing
C Academy · Leçon

Décalages

Décalages à gauche et à droite

Décalages est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.

Décaler les bits

Les opérateurs de décalage déplacent tous les bits d’un entier vers la gauche ou la droite d’un certain nombre de positions.

Le décalage à gauche est << et le décalage à droite est >>.

#include <stdio.h>

int main(void) {
    unsigned x = 1;
    printf("1 << 3 = %u\n", x << 3);
    return 0;
}

Le décalage à gauche multiplie

Décaler une valeur non signée de n positions vers la gauche la multiplie par 2 à la puissance n.

1 << 3 vaut 8 et 5 << 1 vaut 10.

#include <stdio.h>

int main(void) {
    printf("5 << 1 = %u\n", 5u << 1);
    printf("3 << 4 = %u\n", 3u << 4);
    return 0;
}

Le décalage à droite divise

Décaler une valeur non signée de n positions vers la droite la divise par 2 à la puissance n, en supprimant les bits qui sortent par la droite.

20 >> 2 vaut 5.

#include <stdio.h>

int main(void) {
    printf("20 >> 2 = %u\n", 20u >> 2);
    printf("7 >> 1 = %u\n", 7u >> 1);
    return 0;
}

Puissances de deux

Décaler 1 vers la gauche est la manière la plus rapide de générer des puissances de deux.

1 << n est la n-ième puissance de deux.

#include <stdio.h>

int main(void) {
    for (int n = 0; n < 6; n++) {
        printf("2^%d = %u\n", n, 1u << n);
    }
    return 0;
}

Visualiser un décalage

Afficher les bits avant et après montre comment le motif se déplace.

#include <stdio.h>

void print_bits(unsigned char v) {
    for (int i = 7; i >= 0; i--) putchar((v >> i) & 1 ? '1' : '0');
    putchar('\n');
}

int main(void) {
    unsigned char v = 0b00000110;
    print_bits(v);
    print_bits(v << 2);
    return 0;
}

Extraire un bit

Pour lire le bit numéro i, décalez la valeur de i positions vers la droite, puis appliquez un masque avec 1.

Le résultat vaut 0 ou 1.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    for (int i = 0; i < 5; i++) {
        printf("bit %d = %u\n", i, (v >> i) & 1);
    }
    return 0;
}

Construire une valeur bit par bit

Vous pouvez assembler un nombre en décalant les bits à la bonne position, puis en les combinant avec OR.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    v |= (1u << 0);
    v |= (1u << 2);
    v |= (1u << 4);
    printf("v = %u\n", v);
    return 0;
}

Précaution concernant le décalage à droite des valeurs signées

Le décalage à droite d’un entier signé négatif dépend de l’implémentation : il peut recopier le bit de signe.

Pour obtenir des opérations bit à bit prévisibles, préférez les types unsigned.

#include <stdio.h>

int main(void) {
    int s = -8;
    printf("-8 >> 1 = %d (implementation-defined)\n", s >> 1);
    unsigned u = 8;
    printf("8u >> 1 = %u\n", u >> 1);
    return 0;
}

Évitez les décalages excessifs

Effectuer un décalage d’une quantité supérieure ou égale à la largeur du type constitue un comportement indéfini.

Décaler une valeur de 32 bits de 32 positions ou plus est interdit.

#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("unsigned has %zu bits\n", sizeof(unsigned) * CHAR_BIT);
    printf("Safe shift 1u << 31 = %u\n", 1u << 31);
    return 0;
}

Combiner décalage et masque

Le décalage et le masque permettent ensemble d’extraire un champ de plusieurs bits. Ici, nous extrayons les 4 bits centraux d’un octet.

#include <stdio.h>

int main(void) {
    unsigned v = 0b11010110;
    unsigned field = (v >> 2) & 0b1111;
    printf("field = %u\n", field);
    return 0;
}

Multiplier et additionner rapidement

Combiner des décalages permet de multiplier rapidement par des constantes. Multiplier par 10 revient à effectuer un décalage de 3 positions (fois 8), puis un décalage de 1 position (fois 2).

#include <stdio.h>

int main(void) {
    unsigned x = 7;
    unsigned times10 = (x << 3) + (x << 1);
    printf("7 * 10 = %u\n", times10);
    return 0;
}

Vérification rapide

Testez vos connaissances sur les décalages.

Récapitulatif

Vous avez découvert les opérateurs de décalage :

  • << effectue un décalage vers la gauche et multiplie par des puissances de deux.
  • >> effectue un décalage vers la droite et divise par des puissances de deux.
  • (v >> i) & 1 extrait un bit unique.
  • Utilisez unsigned pour obtenir des décalages prévisibles et n’effectuez jamais de décalage égal ou supérieur à la largeur du type.

Questions Fréquemment Posées

La leçon « Décalages » est-elle gratuite ?

Oui — le texte complet de « Décalages » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Décalages » ?

Décalages à gauche et à droite Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C Academy ?

Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Décalages » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C Academy ?

Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Opérateurs bit à bit
  2. Décalages
  3. Masques de bits et indicateurs
  4. Astuces pratiques sur les bits
← Retour à C Academy