Perché sono operazioni fondamentali.
Secondo la stessa linea di pensiero, potresti sostenere che addition ha pochi usi del mondo reale, dal momento che può essere completamente sostituito con sottrazione (e negazione) e moltiplicazione. Ma continuiamo ad aggiungere perché è un'operazione fondamentale.
E non pensare per un momento che solo perché non hai visto molto bisogno di operazioni bit a bit non significa che non vengano utilizzati molto spesso. In effetti, ho usato operazioni bit a bit in quasi tutte le lingue che ho usato per cose come il bit masking.
In cima alla mia testa, ho usato le operazioni bit a bit per l'elaborazione delle immagini, bitfield e flag, l'elaborazione del testo (ad esempio, tutti i caratteri di una particolare classe condividono spesso un pattern di bit comune), la codifica e la decodifica dei dati serializzati, la decodifica Opcode VM o CPU e così via. Senza le operazioni bit a bit, la maggior parte di queste attività richiederebbe operazioni molte volte più complesse per eseguire l'attività in modo meno affidabile o con una leggibilità inferiore.
Ad esempio:
// Given a 30-bit RGB color value as a 32-bit int
// A lot of image sensors spit out 10- or 12-bit data
// and some LVDS panels have a 10- or 12-bit format
b = (color & 0x000003ff);
g = (color & 0x000ffc00) >> 10;
r = (color & 0x3ff00000) >> 20;
// Going the other way:
color = ((r << 20) & 0x3ff00000) | ((g << 10) & 0x000ffc00) | (b & 0x000003ff);
Decodificare le istruzioni della CPU per CPU di tipo RISC (come quando si emula un'altra piattaforma) richiede l'estrazione di parti di un valore elevato come sopra. A volte, eseguire queste operazioni con moltiplicazione e divisione e modulo, ecc., Può essere fino a dieci volte più lento delle operazioni bitwise equivalenti.