Bitweise NOT ~
Der Bitweise-NOT-Operator wandelt alle Bits eines Integer-Wertes in ihr Gegenteil um: Aus 0 wird 1 und umgekehrt. Dies entspricht dem sogenannten Einerkomplement.
|
|
Siehe auch Logisch-NOT-Operator !, Bitweise-AND-Operator &, Bitweise-OR-Operator |, Bitweise-XOR-Operator ^
Details
Der Bitweise-NOT-Operator erwartet einen Operanden als rvalue und wird von rechts nach links abgearbeitet. Der Rückgabewert ist ein rvalue, der stets ein Integer-Typ ist.
Der Bitweise-NOT-Operator ist nur für Integer-Werte zulässig. Unter C++ ist zusätzlich auch die Anwendung des Operators auf boolsche Werte erlaubt, welche jedoch vor Anwendung des Operators in einen int umgewandelt werden.
Der Unterschied zwischen der bitweisen und der logischen Variante des NOT-Operators ist für Einsteiger in die Sprache manchmal schwer verständlich. Der Unterschied ist: Die bitweise Variante verändert alle Bits von Werten, die logische Variante verändert 1-Bit-Werte. Selbst bei erfahrenen Programmierern kommt es vor, dass man aufgrund der ähnlichen Schreibweise (~ oder !) aus Versehen und ohne es zu merken den falschen Operatoren verwendet. Da zudem in gewissen Fällen (beispielsweise bei der Anwendung des Operators auf den Wert -1) die beiden Operatoren dieselben Ergebnisse liefern, ist dies eine schwer aufzufindende Fehlerquelle, die manchmal einige Stunden Fehlersuche benötigt.
Der Bitweise-NOT-Operator wird häufig für Masken verwendet.
Überladen des Operators
Der Bitweise-NOT-Operator hat grundsätzlich die semantische Bedeutung einer komponentenweisen boolschen Verneinung. Die Überladung des Operators wird auch allgemein verwendet, wenn ein Objekt zwei Zustände bezeichnet, zwischen denen hin und her gewechselt werden soll. Allerdings ist auch jegliche andere Semantik vom Programmierer definierbar. Trotzdem sei angemerkt, dass der Bitweise-NOT-Operator nur selten überladen wird
Die Prototypen für das Überladen des Bitweise-NOT-Operators sind die folgenden (Einschränkungen und Erläuterungen siehe Überladen von Operatoren):
|
|
Im folgenden Beispiel wird eine Klasse präsentiert für eine 2x2 Matrix. Der überladene Bitweise-NOT-Operator gibt hier die Inverse der Matrix zurück.
|
|