~ (NOT bit per bit) (Transact-SQL)
Esegue un'operazione con NOT logico bit per bit su un valore integer.
Sintassi
~ expression
Argomenti
expression
Qualsiasi espressione valida con uno qualsiasi dei tipi di dati appartenenti alla categoria dei tipi di dati integer oppure con tipo di dati bit, binary o varbinary. L'espressione specificata in expression viene elaborata come numero binario per l'operazione bit per bit.[!NOTA]
Una sola delle espressioni specificate in expression può essere di tipo binary o varbinary in un'operazione bit per bit.
Tipi restituiti
int se i valori di input sono di tipo int.
smallint se i valori di input sono di tipo smallint.
tinyint se i valori di input sono di tipo tinyint.
bit se i valori di input sono di tipo bit.
Osservazioni
L'operatore bit per bit ~ esegue un'operazione con NOT logico bit per bit per expression, valutando ogni bit in serie. Se il valore di expression è 0, i bit nel set dei risultati vengono impostati su 1. In caso contrario, il bit nel risultato viene cancellato e impostato sul valore 0. In altre parole, i valori 1 diventano 0 e viceversa.
Importante |
---|
Per l'esecuzione di qualsiasi operazione bit per bit, la lunghezza di archiviazione dell'espressione utilizzata nell'operazione è un fattore importante. È consigliabile utilizzare lo stesso numero di byte per l'archiviazione dei valori. Ad esempio, il numero di byte del valore archiviato corrispondente al valore decimale 5 risulta diverso a seconda che 5 venga archiviato come valore di tipo tinyint, smallint o int. Il tipo di dati tinyint infatti archivia i dati utilizzando 1 byte, smallint utilizza 2 byte, mentre int archivia i dati utilizzando 4 byte. Un'operazione bit per bit su un valore decimale di tipo int, pertanto, restituisce risultati diversi rispetto a quelli di una conversione diretta binaria o esadecimale, soprattutto nel caso dell'operatore ~ (NOT bit per bit). L'operazione con NOT bit per bit potrebbe essere eseguita su una variabile di lunghezza inferiore. In questo caso, quando la variabile di lunghezza inferiore viene convertita in una variabile con tipo di dati di lunghezza maggiore, i bit negli 8 bit superiori potrebbero non essere impostati sul valore previsto. È pertanto consigliabile convertire la variabile del tipo di dati di lunghezza minore nel tipo di dati di lunghezza maggiore ed eseguire quindi l'operazione NOT sul valore risultante. |
Esempi
Nell'esempio seguente viene creata una tabella con il tipo di dati int per l'archiviazione dei valori e i due valori vengono inseriti in un'unica riga.
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
Nella query seguente viene eseguita l'operazione con NOT bit per bit sulle colonne a_int_value e b_int_value.
USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;
Set di risultati:
--- ---
-171 -76
(1 row(s) affected)
La rappresentazione binaria di 170 (a_int_value o A) è 0000 0000 1010 1010. L'esecuzione dell'operazione con NOT bit per bit su questo valore genera il risultato binario 1111 1111 0101 0101, ovvero il valore decimale -171. La rappresentazione binaria di 75 è 0000 0000 0100 1011. L'esecuzione dell'operazione con NOT bit per bit genera il risultato 1111 1111 1011 0100, ovvero il valore decimale -76.
(~A)
0000 0000 1010 1010
-------------------
1111 1111 0101 0101
(~B)
0000 0000 0100 1011
-------------------
1111 1111 1011 0100
Vedere anche