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) & 1extrait un bit unique.- Utilisez
unsignedpour 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.