Shift
Shift a sinistra e a destra
Shift è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
Spostare i bit
Gli operatori di shift spostano tutti i bit di un intero verso sinistra o verso destra di un certo numero di posizioni.
Lo shift a sinistra è <<, mentre quello a destra è >>.
#include <stdio.h>
int main(void) {
unsigned x = 1;
printf("1 << 3 = %u\n", x << 3);
return 0;
}Lo shift a sinistra moltiplica
Spostare a sinistra di n posizioni moltiplica un valore senza segno per 2 elevato alla potenza n.
1 << 3 è 8 e 5 << 1 è 10.
#include <stdio.h>
int main(void) {
printf("5 << 1 = %u\n", 5u << 1);
printf("3 << 4 = %u\n", 3u << 4);
return 0;
}Lo shift a destra divide
Spostare a destra di n posizioni divide un valore senza segno per 2 elevato alla potenza n, scartando i bit che escono dall'estremità destra.
20 >> 2 è 5.
#include <stdio.h>
int main(void) {
printf("20 >> 2 = %u\n", 20u >> 2);
printf("7 >> 1 = %u\n", 7u >> 1);
return 0;
}Potenze di due
Spostare a sinistra 1 è il modo più rapido per generare potenze di due.
1 << n è la n-esima potenza di due.
#include <stdio.h>
int main(void) {
for (int n = 0; n < 6; n++) {
printf("2^%d = %u\n", n, 1u << n);
}
return 0;
}Visualizzare uno shift
Stampare i bit prima e dopo lo spostamento mostra come cambia la posizione dello schema.
#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;
}Estrarre un bit
Per leggere il bit numero i, sposti il valore a destra di i posizioni e applichi una maschera con 1.
Il risultato è 0 o 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;
}Costruire un valore bit per bit
È possibile assemblare un numero spostando i bit nella posizione corretta e combinandoli con 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;
}Attenzione allo shift a destra degli interi con segno
Spostare a destra un intero negativo con segno dipende dall'implementazione: il bit del segno potrebbe essere copiato.
Per ottenere operazioni sui bit prevedibili, preferisca i tipi 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;
}Evitare gli shift eccessivi
Uno shift di un numero di posizioni maggiore o uguale alla larghezza del tipo produce comportamento indefinito.
Non è consentito effettuare lo shift di un valore a 32 bit di 32 posizioni o più.
#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;
}Combinare shift e maschera
Insieme, shift e maschera consentono di estrarre un campo di più bit. Qui estraiamo i 4 bit centrali di un byte.
#include <stdio.h>
int main(void) {
unsigned v = 0b11010110;
unsigned field = (v >> 2) & 0b1111;
printf("field = %u\n", field);
return 0;
}Moltiplicazioni e addizioni rapide
Combinare gli shift consente di moltiplicare rapidamente per costanti. Moltiplicare per 10 equivale a uno shift di 3 posizioni (per 8) più uno shift di 1 posizione (per 2).
#include <stdio.h>
int main(void) {
unsigned x = 7;
unsigned times10 = (x << 3) + (x << 1);
printf("7 * 10 = %u\n", times10);
return 0;
}Verifica rapida
Verifichi la Sua conoscenza degli shift.
Riepilogo
Ha imparato a conoscere gli operatori di shift:
<<sposta a sinistra e moltiplica per potenze di due.>>sposta a destra e divide per potenze di due.(v >> i) & 1estrae un singolo bit.- Utilizzi
unsignedper ottenere shift prevedibili e non effettui mai shift di una quantità pari o superiore alla larghezza del tipo.
Domande Frequenti
La lezione «Shift» è gratuita?
Sì — il testo completo di «Shift» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «Shift»?
Shift a sinistra e a destra Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Shift»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.