~ (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 de n'importe lequel des types de données de la catégorie de type de données entier, à savoir le type de données bit, ou les types de données binary ou varbinary. expression est considérée comme un nombre binaire pour l'opération au niveau du bit.

ms173468.note(fr-fr,SQL.90).gifRemarque :
Une seule expression peut être du type de données binary ou varbinary dans une opération au niveau du 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 sont définis à 1 ; sinon, le bit du résultat est réinitialisé à la valeur 0. En d'autres termes, les uns sont transformés en zéros et les zéros en uns.

ms173468.note(fr-fr,SQL.90).gifImportant :
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.

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.

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

Voir aussi

Référence

Expressions (Transact-SQL)
Opérateurs (Transact-SQL)

Autres ressources

Opérateurs au niveau du bit (moteur de base de données)

Aide et Informations

Assistance sur SQL Server 2005