Parce que ce sont des opérations fondamentales.
Par la même ligne de pensée, vous pourriez faire valoir que l' addition a peu d'utilisations réelles, car elle peut être remplacée complètement par la soustraction (et la négation) et la multiplication. Mais nous gardons l'addition car c'est une opération fondamentale.
Et ne pensez pas un instant que le simple fait que vous n'ayez pas vu un grand besoin d'opérations au niveau du bit ne signifie pas qu'elles ne sont pas utilisées très souvent. En effet, j'ai utilisé des opérations au niveau du bit dans presque tous les langages que j'ai utilisés pour des choses comme le masquage de bits.
Du haut de ma tête, j'ai utilisé des opérations au niveau du bit pour le traitement d'image, les champs de bits et les indicateurs, le traitement de texte (par exemple, tous les caractères d'une classe particulière partagent souvent un modèle de bits commun), l'encodage et le décodage de données sérialisées, le décodage de VM ou CPU opcodes, etc. Sans opérations au niveau du bit, la plupart de ces tâches nécessiteraient des opérations beaucoup plus complexes pour effectuer la tâche de manière moins fiable ou avec une meilleure lisibilité.
Par exemple:
// 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);
Le décodage des instructions CPU pour les CPU de type RISC (comme lors de l'émulation d'une autre plate-forme) nécessite d'extraire des parties d'une grande valeur comme ci-dessus. Parfois, effectuer ces opérations avec multiplication et division et modulo, etc., peut être jusqu'à dix fois plus lent que les opérations binaires équivalentes.