~ (NOT bit a bit) (Transact-SQL)
Lleva a cabo una operación lógica NOT bit a bit en un valor entero.
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.
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.
Notas
El operador bit a bit ~ realiza una operación lógica NOT bit a bit para la expression, tomando un bit cada vez. Si expression tiene un valor de 0, los bits en el conjunto de resultados están establecidos en 1; de lo contrario, el bit en el resultado se borra a un valor de 0. En otras palabras, los unos pasan a los ceros y los ceros pasan a unos.
Importante |
---|
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. |
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