~ (NOT exclusif au niveau du bit) (Transact-SQL)

Exécute une opération logique NOT au niveau du bit sur une valeur entière.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

~ expression

Arguments

  • expression
    Toute expression valide d'un des types de données de la catégorie des types de données integer (entier), ou de type bit, binary ou varbinary. L'argument expression est traité comme un nombre binaire pour l'opération au niveau du bit.

    [!REMARQUE]

    Un seul argument expression peut être du type binary ou du type varbinary dans une opération au niveau du bit.

Types de résultats

int si les valeurs d'entrée sont du type int.

smallint si les valeurs d'entrée sont du type smallint.

tinyint si les valeurs d'entrée sont du type tinyint.

bit si les valeurs d'entrée sont du type bit.

Notes

L'opérateur ~ au niveau du bit exécute un NOT logique au niveau du bit sur cette expression, en évaluant chaque bit. Si expression a la valeur 0, les bits du jeu de résultats prennent la valeur 1 ; sinon, le bit résultant est mis à 0. En d'autres termes, les uns sont changés en zéros et les zéros sont changés en uns.

Important

Quelle que soit l'opération au niveau du bit que vous effectuez, la longueur d'enregistrement de l'expression sur laquelle porte l'opération est importante. Il est recommandé d'utiliser le même nombre d'octets lors du stockage des valeurs. Par exemple, le stockage de la valeur décimale 5 en tant que tinyint, smallint ou int produit une valeur stockée avec différents nombres d'octets : tinyint stocke les données sur un 1 octet, smallint stocke les données sur 2 octets et int stocke les données sur 4 octets. En conséquence, l'exécution d'une opération au niveau du bit sur une valeur décimale int peut produire des résultats différents de ceux de la même opération sur la même valeur traduite directement en binaire ou en hexadécimal, en particulier avec l'opérateur ~ (NOT au niveau du bit). L'opération NOT au niveau du bit peut se produire sur une variable plus courte. Dans ce cas, lorsque la variable plus courte est convertie en un type de données plus long, les bits des 8 bits de gauche risquent d'avoir une valeur imprévue. Nous vous recommandons de convertir d'abord la variable de type de données courte dans le type de données plus long, et d'exécuter ensuite l'opération NOT sur le résultat.

Exemples

Cet exemple crée une table en utilisant le type de données int pour stocker les valeurs et insère les deux valeurs dans une ligne.

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

La requête suivante exécute l'opération NOT au niveau du bit sur les colonnes a_int_value et b_int_value.

USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;

Voici le jeu de résultats obtenu :

--- --- 
-171  -76 

(1 row(s) affected)

La représentation binaire de 170 (a_int_value ou A) est 0000 0000 1010 1010. L'exécution de l'opération NOT au niveau du bit produit le résultat binaire 1111 1111 0101 0101, qui est -171 en notation décimale. La représentation binaire de 75 est 0000 0000 0100 1011. L'exécution de l'opération NOT au niveau du bit produit 1111 1111 1011 0100, qui est -76 en notation décimale.

 (~A)   
         0000 0000 1010 1010
         -------------------
         1111 1111 0101 0101
(~B)   
         0000 0000 0100 1011
         -------------------
         1111 1111 1011 0100