~ (Bitwise NOT) (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase de Dados SQL no Microsoft Fabric

Executa uma operação lógica NOT bit a bit sobre um valor inteiro.

Transact-SQL convenções de sintaxe

Syntax

~ expression

Arguments

expression

Qualquer expressão válida de qualquer um dos tipos de dados da categoria de tipos de dados inteiros, do bit, ou dos tipos de dados binários ou varbinários . expression é tratada como um número binário para a operação bitwise.

Note

Apenas uma expressão pode ser do tipo de dados binário ou varbinary em uma operação bitwise.

Tipos de devolução

int se os valores de entrada forem int.

smallint se os valores de entrada forem smallint.

tinyint se os valores de entrada forem tinyint.

bit se os valores de entrada forem bit.

Remarks

O ~ operador bit a bit executa uma lógica NOT bit a bit para a expressão, tomando cada bit por sua vez. Se a expressão tiver um valor de 0, os bits no conjunto de resultados são definidos como 1. Caso contrário, o bit no resultado é limpo para um valor de 0. Em outras palavras, uns são alterados para zeros e zeros são alterados para uns.

Important

Quando você executa qualquer tipo de operação bitwise, o comprimento de armazenamento da expressão usada na operação bitwise é importante. Recomendamos que você use esse mesmo número de bytes ao armazenar valores. Por exemplo, armazenar o valor decimal de 5 como um tinyint, smallint ou int produz um valor armazenado com diferentes números de bytes: tinyint armazena dados usando 1 byte; O Smallint armazena dados usando 2 bytes e o INT armazena dados usando 4 bytes. Portanto, realizar uma operação bit a bit num valor decimal int pode produzir resultados diferentes daqueles que usam uma translação binária direta ou hexadecimal, especialmente quando é usado o ~ operador (bit a NOTbit). A operação bit NOT a bit pode ocorrer numa variável de comprimento menor. Neste caso, quando o comprimento mais curto é convertido para uma variável de tipo de dado mais longa, os bits nos 8 bits superiores podem não ser definidos para o valor esperado. Recomendamos que converta a variável de tipo de dado menor para o tipo de dado maior e depois realize a NOT operação sobre o resultado.

Examples

O exemplo a seguir cria uma tabela usando o tipo de dados int para armazenar os valores e insere os dois valores em uma linha.

CREATE TABLE bitwise
(
    a_int_value INT NOT NULL,
    b_int_value INT NOT NULL
);
GO

INSERT bitwise
VALUES (170, 75);
GO

A consulta seguinte executa a análise bit NOT a bit nas a_int_value colunas e b_int_value .

SELECT ~a_int_value AS NotA,
       ~b_int_value AS NotB
FROM bitwise;

Aqui está o conjunto de resultados.

NotA   NotB
-----  -----
-171   -76

A representação binária de 170 (a_int_value ou A) é 0000 0000 0000 0000 0000 0000 1010 1010. Ao realizar a operação bit NOT a bit sobre este valor, obtém-se o resultado 1111 1111 1111 1111 1111 1111 0101 0101binário , que é decimal -171. A representação binária para 75 é 0000 0000 0000 0000 0000 0000 0100 1011. Realizar a operação bit NOT a bit produz 1111 1111 1111 1111 1111 1111 1011 0100, que é decimal -76.

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