Qual è il vantaggio di studiare gli operatori bit a bit? [duplicare]

12

Qual è il vantaggio di studiare gli operatori bit a bit (Bitwise Not, Bitwise AND, Bitwise OR, Bitwise XOR, Left Shift, Signed Right Shift, Unsigned Right Shift ecc.)?

Useremo davvero questi operatori nella programmazione?

    
posta tarek11011 05.10.2011 - 07:40
fonte

5 risposte

31

"Sì, lo faremo".

Le operazioni a bit sono ovunque. Sono perfetti per lavorare con bitfield (una pratica che è onnipresente in C e C ++), come un campo 'flags' in una struttura dati o argomento di funzione. Fondamentalmente, | combina flag, ^ flip flip, & controlla se è impostato un flag e il modello x &= ~FLAG cancella un flag.

Le operazioni bit a bit sono onnipresenti in tutte le cose a basso livello - driver hardware, protocolli di rete, formati di file binari - così come alcuni campi di livello superiore come codifiche di caratteri, crittografia, ecc.

Il bit-shifting può anche raddoppiare per divisione in interi e moltiplicazione per potenze di 2, con un comportamento di arrotondamento leggermente diverso per i numeri negativi (a volte, ma non sempre, più desiderabile di quello che fa la divisione intera normale).

Nei loop stretti, a volte può essere utilizzata l'aritmetica bit a bit per evitare condizionali, il che è vantaggioso perché le moderne CPU usano la previsione dei branch, e una misprediction (cioè, la condizione in un'istruzione if valuta diversamente dal precedente) causa un ritardo significativo. Usando l'aritmetica bit a bit, lo stesso calcolo può talvolta essere espresso senza condizionali.

Anche se non intendi lavorare in nessuno degli scenari sopra descritti, è comunque una buona idea studiare e comprendere le operazioni bit a bit: tutti i computer moderni sono binari e devi assolutamente conoscere i principi di base con cui operare. I numeri in un computer non si comportano come numeri nel mondo reale e studiare le operazioni binarie ti aiuterà a capire perché.

    
risposta data 05.10.2011 - 07:59
fonte
7

Dipende tutto da cosa è veramente il tuo obiettivo. Alcuni programmatori possono seguire la loro intera carriera senza usare operazioni bit a bit e possono fare abbastanza bene per loro stessi (anche se incontreranno frustrazione ogni volta che si tratta di codice che li contiene).

Tuttavia, le operazioni bit a bit sono una parte fondamentale dell'ingegneria del software e le domande ad esse relative vengono poste abbastanza frequentemente nelle interviste (insieme ad altre domande fondamentali su CS come come convertire tra% base%% e%% base%) .

Scoprirai che quelli che provengono da uno sfondo di CS li useranno quando il bisogno sorge in molti modi diversi (un caso d'uso comune è un campo bit ). Se non capisci come funzionano le operazioni bit, generalmente non riuscirai a capire le sezioni che li contengono.

Ora, dopo aver detto tutto ciò, le operazioni bituminose dovrebbero essere abbastanza facili da capire per chiunque persegua una carriera nella programmazione e non dovrebbe davvero richiedere molto studio.

    
risposta data 05.10.2011 - 07:56
fonte
7

Lavoro nel campo embedded e stare completamente a casa con operazioni bit a bit è una condizione sine qua non per chiunque voglia lavorare qui. È una delle prime domande di intervista che chiedo. Tutti i nostri software hanno una relazione molto intima con l'hardware, la maggior parte dei quali è controllata modificando i singoli bit nei registri hardware. Cambiare il bit sbagliato ha conseguenze disastrose.

    
risposta data 05.10.2011 - 08:54
fonte
0

Non molto. Occasionalmente si presentano in API (C / C ++ in particolare) che vogliono che un set di flag venga passato come un singolo numero. Ma anche lì vengono trattati come operatori aritmetici (64 + 1 o 2 < < 6 | 2 < < 0, stessa diff) Quindi, se lavori solo con lingue più moderne, hanno una priorità molto bassa in la pila di cose che potresti voler imparare.

    
risposta data 05.10.2011 - 09:27
fonte
0

Ecco un esempio di operazioni bit a bit in un'applicazione "normale" (non di gioco, non di basso livello), da oggi:

Abbiamo un'app VB.Net che è stata aggiornata da una vecchia app VB6, che consente agli utenti di scegliere il proprio colore. Stavamo avendo problemi perché il colore è memorizzato nel database come un colore VB6, che sono interi a quattro byte memorizzati come ABGR (alpha-blue-green-red). Tuttavia, .Net utilizza il più comune ARGB (alpha-red-green-blue).

Se hai una solida conoscenza degli operatori bit a bit, questa è una correzione facile di 3 minuti. In caso contrario, probabilmente ti saresti trovato a dover lottare per una buona giornata cercando di capirli.

    
risposta data 02.11.2011 - 22:47
fonte

Leggi altre domande sui tag