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

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

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

Conventions de la syntaxe Transact-SQL

Syntaxe

~ expression  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

Arguments

expression
Toute expression valide de tout type de données de la catégorie entier, ou de type bit, binary ou varbinary. L’expression est traitée comme un nombre binaire pour l’opération au niveau du bit.

Notes

Une seule expression peut être de type binary ou varbinary dans une opération au niveau du bit.

Types des résultats

int si les valeurs d’entrée sont int.

smallint si les valeurs d’entrée sont smallint.

tinyint si les valeurs d’entrée sont tinyint.

bit si les valeurs d’entrée sont bit.

Notes

L’opérateur au niveau du bit ~ exécute une opération NOT logique au niveau du bit sur cette expression, en évaluant chaque bit. Si l’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 des nombres d’octets différents : tinyint stocke les données sur un 1 octet, smallint sur 2 octets et int 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.

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.

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

Voici l'ensemble de résultats obtenu :

--- ---   
-171  -76   
  
(1 row(s) affected)  

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

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

Voir aussi

Expressions (Transact-SQL)
Opérateurs (Transact-SQL)
Opérateurs au niveau du bit (Transact-SQL)