Partilhar via


~ (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 NOT lógica bit a bit em 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 tipo de dados inteiro, o bit ou os tipos de dados binários ou varbinary . 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 Resultados

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 um NOT lógico bit a bit para a expressão, tomando cada bit por vez. Se a expressão tiver um valor de 0, os bits no conjunto de resultados serã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, executar uma operação bit a bit em um valor decimal int pode produzir resultados diferentes daqueles que usam uma conversão binária ou hexadecimal direta, especialmente quando o operador (bit a ~ bit NOT) é usado. A operação bit a bit NOT pode ocorrer em uma variável de comprimento mais curto. Nesse caso, quando o comprimento mais curto é convertido em uma variável de tipo de dados mais longa, os bits nos 8 bits superiores podem não ser definidos para o valor esperado. Recomendamos que você converta a variável de tipo de dados menor para o tipo de dados maior e, em seguida, execute a operação NOT no 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 a seguir executa o bit a bit NOT nas a_int_value colunas e b_int_value .

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

Aqui está o conjunto de resultados:

--- ---   
-171  -76   
  
(1 row(s) affected)  

A representação binária de 170 (a_int_value ou A) é 0000 0000 0000 0000 0000 0000 1010 1010. Executar a operação bit a bit NOT nesse valor produz 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. Executar a operação bit a bit NOT 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  

Ver também

Expressões (Transact-SQL)
Operadores (Transact-SQL)
Operadores Bitwise (Transact-SQL)