Çünkü onlar temel operasyonlar.
Düşünce aynı hat ederek, iddia olabilir eklenmesi o çıkarma (ve olumsuzlama) ve çarpma ile tamamen değiştirmek mümkün olduğundan, birkaç gerçek dünya kullanımları vardır. Ama eklemeye devam ediyoruz çünkü bu temel bir işlem.
Ve bir an için düşünün, sadece bitsel işlemlere çok fazla ihtiyaç duymadığınız için çok sık kullanılmadıkları anlamına gelmez. Gerçekten de, bit maskeleme gibi şeyler için kullandığım neredeyse her dilde bitsel ops kullandım.
Başımın üstünde, görüntü işleme, bit alanları ve bayraklar, metin işleme (örneğin, belirli bir sınıfın tüm karakterleri genellikle ortak bir bit desenini paylaşıyor), seri veriyi kodlama ve kod çözme, VM veya CPU kod çözme için bitsel ops kullandım opcodes vb. Bitsel oplar olmadan, bu görevlerin çoğu, görevi daha az güvenilir veya daha düşük okunabilirlikle gerçekleştirmek için birçok kez daha karmaşık işlemler gerektirir.
Örneğin:
// 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);
RISC tipi CPU'lar için CPU yönergelerinin kodunun çözülmesi (başka bir platform taklit edilirken olduğu gibi) yukarıdaki gibi büyük bir değere sahip bölümlerin çıkarılmasını gerektirir. Bazen, bu işlemleri çarpma ve bölme ve modulo, vb. İle yapmak, eşdeğer bitsel op'lardan on kat daha yavaş olabilir.