Perché sono operazioni fondamentali.
Per lo stesso ragionamento, si potrebbe sostenere che l' addizione ha pochi usi nel mondo reale, poiché può essere sostituita completamente 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 per bit non significa che non vengano utilizzate molto spesso. In effetti, ho usato operazioni bit per bit in quasi tutte le lingue che ho usato per cose come il mascheramento dei bit.
Dalla parte superiore della mia testa, ho usato operazioni bit per bit per l'elaborazione di immagini, campi di bit e flag, elaborazione di testo (ad esempio, tutti i caratteri di una particolare classe spesso condividono un modello di bit comune), codifica e decodifica di dati serializzati, decodifica di VM o CPU codici operativi e così via. Senza operazioni bit per bit, la maggior parte di queste attività richiederebbe operazioni molto più complesse per eseguire l'attività in modo meno affidabile o con una scarsa leggibilità.
Per 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);
La decodifica delle istruzioni della CPU per le CPU di tipo RISC (come quando si emula un'altra piattaforma) richiede l'estrazione di porzioni di grande valore come sopra. A volte, fare queste operazioni con moltiplicazione e divisione e modulo, ecc., Può essere fino a dieci volte più lento delle equivalenti operazioni bit per bit.