Je pense que la deuxième partie de la question:
En outre, à quoi servent réellement les opérateurs bit à bit? J'apprécierais quelques exemples.
N'a été que partiellement abordé. Ce sont mes deux cents à ce sujet.
Les opérations au niveau du bit dans les langages de programmation jouent un rôle fondamental dans le traitement de nombreuses applications. Presque tous les calculs de bas niveau doivent être effectués à l'aide de ce type d'opérations.
Dans toutes les applications qui doivent envoyer des données entre deux nœuds, telles que:
Dans la couche de communication de niveau inférieur, les données sont généralement envoyées dans ce qu'on appelle des trames . Les trames ne sont que des chaînes d'octets envoyées via un canal physique. Ces trames contiennent généralement les données réelles plus quelques autres champs (codés en octets) qui font partie de ce qu'on appelle l'en- tête . L'en-tête contient généralement des octets qui codent certaines informations relatives à l'état de la communication (par exemple, avec des indicateurs (bits)), des compteurs de trame, des codes de correction et de détection d'erreur, etc. Pour obtenir les données transmises dans une trame, et pour construire le frames pour envoyer des données, vous aurez besoin pour certaines opérations au niveau du bit.
En général, lorsque vous traitez avec ce type d'applications, une API est disponible pour que vous n'ayez pas à gérer tous ces détails. Par exemple, tous les langages de programmation modernes fournissent des bibliothèques pour les connexions socket, vous n'avez donc pas réellement besoin de créer les trames de communication TCP / IP. Mais pensez aux bonnes personnes qui ont programmé ces API pour vous, elles ont dû s'occuper de la construction du cadre à coup sûr; en utilisant toutes sortes d'opérations au niveau du bit pour aller et venir de la communication de bas niveau à la communication de niveau supérieur.
À titre d'exemple concret, imaginez que quelqu'un vous donne un fichier contenant des données brutes qui ont été capturées directement par le matériel de télécommunication. Dans ce cas, pour trouver les trames, vous devrez lire les octets bruts dans le fichier et essayer de trouver une sorte de mots de synchronisation, en scannant les données bit par bit. Après avoir identifié les mots de synchronisation, vous devrez obtenir les images réelles et les SHIFT si nécessaire (et ce n'est que le début de l'histoire) pour obtenir les données réelles qui sont transmises.
Une autre famille d'applications de bas niveau très différente est lorsque vous devez contrôler le matériel à l'aide de certains ports (anciens), tels que les ports parallèles et série. Ces ports sont contrôlés en définissant certains octets, et chaque bit de ces octets a une signification spécifique, en termes d'instructions, pour ce port (voir par exemple http://en.wikipedia.org/wiki/Parallel_port ). Si vous souhaitez créer un logiciel qui fait quelque chose avec ce matériel, vous aurez besoin d'opérations au niveau du bit pour traduire les instructions que vous souhaitez exécuter en octets que le port comprend.
Par exemple, si vous avez des boutons physiques connectés au port parallèle pour contrôler un autre périphérique, il s'agit d'une ligne de code que vous pouvez trouver dans l'application logicielle:
read = ((read ^ 0x80) >> 4) & 0x0f;
J'espère que cela contribue.