~ (NOT bit a bit) (Transact-SQL)
Lleva a cabo una operación lógica NOT bit a bit en un valor entero.
Convenciones 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.
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. |
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)