Ich denke, dass der zweite Teil der Frage:
Wofür werden bitweise Operatoren tatsächlich verwendet? Ich würde einige Beispiele schätzen.
Wurde nur teilweise angesprochen. Das sind meine zwei Cent in dieser Angelegenheit.
Bitweise Operationen in Programmiersprachen spielen bei vielen Anwendungen eine grundlegende Rolle. Fast alle Low-Level-Berechnungen müssen mit dieser Art von Operationen durchgeführt werden.
In allen Anwendungen, die Daten zwischen zwei Knoten senden müssen, z.
In der unteren Kommunikationsebene werden die Daten normalerweise in sogenannten Frames gesendet . Frames sind nur Zeichenfolgen von Bytes, die über einen physischen Kanal gesendet werden. Diese Frames enthalten normalerweise die tatsächlichen Daten sowie einige andere Felder (in Bytes codiert), die Teil des sogenannten Headers sind . Der Header enthält normalerweise Bytes, die einige Informationen codieren, die sich auf den Status der Kommunikation beziehen (z. B. mit Flags (Bits)), Rahmenzählern, Korrektur- und Fehlererkennungscodes usw., um die übertragenen Daten in einem Rahmen abzurufen und die zu erstellen Frames, um Daten zu senden, benötigen Sie sicher bitweise Operationen.
Wenn Sie mit solchen Anwendungen arbeiten, steht im Allgemeinen eine API zur Verfügung, sodass Sie sich nicht mit all diesen Details befassen müssen. Beispielsweise bieten alle modernen Programmiersprachen Bibliotheken für Socket-Verbindungen, sodass Sie die TCP / IP-Kommunikationsrahmen nicht erstellen müssen. Aber denken Sie an die guten Leute, die diese APIs für Sie programmiert haben. Sie mussten sich mit Sicherheit mit der Rahmenkonstruktion befassen. Verwenden aller Arten von bitweisen Operationen, um von der Kommunikation auf niedriger Ebene zur Kommunikation auf höherer Ebene hin und her zu gelangen.
Stellen Sie sich als konkretes Beispiel vor, jemand gibt Ihnen eine Datei mit Rohdaten, die direkt von Telekommunikationshardware erfasst wurden. In diesem Fall müssen Sie zum Auffinden der Frames die Rohbytes in der Datei lesen und versuchen, Synchronisationswörter zu finden, indem Sie die Daten Stück für Stück scannen. Nachdem Sie die Synchronisationswörter identifiziert haben, müssen Sie die tatsächlichen Frames abrufen und sie bei Bedarf verschieben (und dies ist nur der Anfang der Geschichte), um die tatsächlichen Daten zu erhalten, die übertragen werden.
Eine andere, sehr unterschiedliche Anwendungsfamilie auf niedriger Ebene besteht darin, dass Sie die Hardware über einige (alte) Ports steuern müssen, z. B. parallele und serielle Ports. Diese Ports werden durch Setzen einiger Bytes gesteuert, und jedes Bit dieser Bytes hat in Bezug auf Anweisungen eine bestimmte Bedeutung für diesen Port (siehe zum Beispiel http://en.wikipedia.org/wiki/Parallel_port ). Wenn Sie Software erstellen möchten, die etwas mit dieser Hardware tut, benötigen Sie bitweise Operationen, um die Anweisungen, die Sie ausführen möchten, in die Bytes zu übersetzen, die der Port versteht.
Wenn Sie beispielsweise einige physische Tasten an den parallelen Anschluss angeschlossen haben, um ein anderes Gerät zu steuern, ist dies eine Codezeile, die Sie in der Soft-Anwendung finden:
read = ((read ^ 0x80) >> 4) & 0x0f;
Hoffe das trägt dazu bei.