mi sono imbattuto in questo pezzo di codice C:Perché prima bitshifting a sinistra e poi a destra, invece di E-ing?
typedef int gint
// ...
gint a, b;
// ...
a = (b << 16) >> 16;
Per facilità di notazione supponiamo che b = 0x11223344
a questo punto. Per quanto posso vedere che fa il seguente:
b << 16
darà0x33440000
>> 16
darà0x00003344
Così, i 16 bit più alti vengono scartati.
Perché qualcuno dovrebbe scrivere (b << 16) >> 16
se b & 0x0000ffff
funzionerebbe anche? La seconda forma non è più comprensibile? C'è qualche ragione per usare bitshifts in un caso come questo? C'è qualche caso limite in cui i due non potrebbero essere gli stessi?
Cosa ha a che fare con C "istruzioni"? –
@KerrekSB all'inizio un pensiero un compilatore non molto ottimale potrebbe usare più istruzioni per i bitshift, ma dopo aver riconsiderato, non dovrebbe essere così. Grazie. – Keelan
Forse il programmatore voleva che il codice fosse meno leggibile! Questa è l'unica cosa che riesco a pensare! – CinCout