~ (Bitweises NOT) (Transact-SQL)
Führt eine bitweise logische NOT-Operation für einen ganzzahligen Wert durch.
Syntax
~ expression
Argumente
expression
Bezeichnet jeden gültigen Ausdruck von einem Datentyp aus der ganzzahligen Datentypkategorie oder vom Datentyp bit, binary oder varbinary. expression wird als eine Binärzahl für die bitweise Operation behandelt.Hinweis Bei einer bitweisen Operation kann nur ein expression vom Datentyp binary oder varbinary sein.
Ergebnistypen
int, wenn die Eingabewerte int sind.
smallint, wenn die Eingabewerte smallint sind.
tinyint, wenn die Eingabewerte tinyint sind.
bit, wenn die Eingabewerte bit sind.
Hinweise
Mit dem bitweisen ~-Operator wird ein bitweises logisches NOT für expression durchgeführt, indem jedes Bit abgearbeitet wird. Wenn expression den Wert 0 besitzt, wird für die Bits im Resultset 1 festgelegt. Andernfalls wird das Bit im Ergebnis gelöscht auf 0 (null) festgelegt. Mit anderen Worten, Einsen werden zu Nullen und Nullen werden zu Einsen geändert.
Wichtig |
---|
Beim Durchführen aller bitweisen Operationen ist es wichtig, auf die Speicherlänge des Ausdrucks zu achten, der bei der bitweisen Operation verwendet wird. Beim Speichern von Werten wird empfohlen, dieselbe Anzahl von Bytes zu verwenden. Beispielsweise wird beim Speichern des dezimalen Werts 5 als tinyint, smallint oder int dieser Wert mit unterschiedlicher Byteanzahl abgespeichert: Bei tinyint wird 1 Byte verwendet, bei smallint 2 Bytes, und bei int werden 4 Bytes belegt. Daher kann eine bitweise Operation mit einem dezimalen int-Wert andere Ergebnisse erzeugen als eine direkte binäre oder hexadezimale Umwandlung, besonders bei Verwendung des ~-Operators (bitweises NOT). Eine bitweise NOT-Operation kann auf eine Variable kürzerer Länge angewendet werden. In diesem Fall kann es vorkommen, dass bei der Konvertierung in einen längeren Datentyp die höherwertigen acht Bits nicht auf den erwarteten Wert festgelegt werden. Es wird empfohlen, die Variable mit dem kleineren Datentyp in den größeren Datentyp zu konvertieren und anschließend die NOT-Operation mit dem Ergebnis durchzuführen. |
Beispiele
Im folgenden Beispiel wird eine Tabelle mithilfe des int-Datentyps erstellt, um die Werte zu speichern, und die beiden Werte in eine Zeile eingefügt.
USE tempdb;
GO
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'bitwise')
DROP TABLE bitwise;
GO
CREATE TABLE bitwise
(
a_int_value int NOT NULL,
b_int_value int NOT NULL
);
GO
INSERT bitwise VALUES (170, 75);
GO
Die folgende Abfrage führt das bitweise NOT für die Spalten a_int_value und b_int_value durch.
USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;
Im Folgenden wird das Resultset aufgeführt:
--- ---
-171 -76
(1 row(s) affected)
Die binäre Darstellung von 170 (a_int_value oder A) ist 0000 0000 1010 1010. Die Durchführung einer bitweisen NOT-Operation mit diesem Wert erzeugt das binäre Ergebnis 1111 1111 0101 0101, was dem dezimalen Wert -171 entspricht. Die binäre Darstellung von 75 ist 0000 0000 0100 1011. Die Durchführung der bitweisen NOT-Operation ergibt 1111 1111 1011 0100, was dem dezimalen Wert -76 entspricht.
(~A)
0000 0000 1010 1010
-------------------
1111 1111 0101 0101
(~B)
0000 0000 0100 1011
-------------------
1111 1111 1011 0100
Siehe auch