~ (NOT bit a bit) (Transact-SQL)

Lleva a cabo una operación lógica NOT bit a bit en un valor entero.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

~ expression

Argumentos

expression

Es una expresión válida de uno de los tipos de datos de la categoría del tipo de datos entero, los tipos de datos bit, binary o varbinary. expression se trata como un número binario para realizar la operación bit a bit.

[!NOTA] Sólo una expression puede ser del tipo de datos binary o varbinary en una operación bit a bit.

Notas

El operador ~ bit a bit realiza una operación lógica NOT bit a bit para la expression, y, para ello, toma cada bit correspondiente. Si expression tiene el valor 0, los bits en el conjunto de resultado se establecen en 1; de lo contrario, el bit en el resultado pasa al valor 0. Es decir, los unos se cambian a ceros y los ceros se cambian a unos.

ms173468.note(es-es,SQL.90).gifImportante:
Cuando se realiza cualquier clase de operación bit a bit, es importante la longitud del almacenamiento de la expresión que se utiliza para la operación bit a bit. Se recomienda utilizar el mismo número de bytes al almacenar los valores. Por ejemplo, almacenar el valor decimal 5 como un tinyint, smallint o int produce un valor que se almacena con un número de bytes diferente. tinyint almacena los datos con 1 byte, smallint los almacena con 2 bytes e int, con 4 bytes. De esta forma, realizar una operación bit a bit en un valor decimal int puede producir resultados distintos de los que utilizan una traducción a binario directo o hexadecimal, especialmente cuando se utiliza el operador ~ (NOT bit a bit). La operación NOT bit a bit puede tener lugar en una variable con una longitud menor. En este caso, cuando se convierte a una variable de un tipo de datos más largo, los bits del conjunto de 8 bits superiores no pueden establecerse en el valor previsto. Se recomienda convertir la variable del tipo de datos más pequeño al tipo de datos mayor, y, a continuación, realizar la operación NOT en el resultado.

Tipos de resultado

int si los valores de entrada son int.

smallint si los valores de entrada son smallint.

tinyint si los valores de entrada son tinyint.

bit si los valores de entrada son bit.

Ejemplos

En el ejemplo siguiente se crea una tabla con el tipo de datos int para almacenar los valores y se insertan los dos valores en una fila.

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 consulta siguiente realiza la operación NOT bit a bit en las columnas a_int_value y b_int_value.

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

El conjunto de resultados es:

--- --- 
-171  -76 

(1 row(s) affected)

La representación binaria de 170 (a_int_value o A) es 0000 0000 1010 1010. Realizar la operación NOT bit a bit en este valor produce el resultado binario 1111 1111 0101 0101 que es el decimal -171. La representación binaria de 75 es 0000 0000 0100 1011. Realizar la operación NOT bit a bit produce 1111 1111 1011 0100, que es el decimal -76.

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

Vea también

Referencia

Expresiones (Transact-SQL)
Operadores (Transact-SQL)

Otros recursos

Bit a bit (operadores del motor de base de datos)

Ayuda e información

Obtener ayuda sobre SQL Server 2005