Dela via


~ (Bitwise NOT) (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Utför en bitvis logisk NOT-åtgärd på ett heltalsvärde.

Transact-SQL syntaxkonventioner

Syntax

~ expression  

Arguments

expression
Är ett giltigt uttryck för någon av datatyperna i heltalsdatatypen kategori, bit eller binära eller varbinära datatyper. uttrycket behandlas som ett binärt tal för bitvis-åtgärden.

Note

Endast ett uttryck kan vara av antingen binär eller varbinär datatyp i en bitvis åtgärd.

Result Types

int om indatavärdena är int.

smallint om indatavärdena är småint.

tinyint om indatavärdena är småint.

bit om indatavärdena är bit.

Remarks

Bitvisoperatorn ~ utför en bitvis logisk NOT för uttrycket och tar varje bit i tur och ordning. Om uttrycket har värdet 0 anges bitarna i resultatuppsättningen till 1. Annars rensas biten i resultatet till värdet 0. Med andra ord ändras de till nollor och nollor ändras till ettor.

Important

När du utför någon typ av bitvis åtgärd är lagringslängden för uttrycket som används i bitvis-åtgärden viktig. Vi rekommenderar att du använder samma antal byte när du lagrar värden. Om du till exempel lagrar decimalvärdet 5 som en litenint, smallint eller int skapas ett värde som lagras med olika antal byte: tinyint lagrar data med 1 byte; smallint lagrar data med 2 byte och int lagrar data med 4 byte. Därför kan en bitvis åtgärd på ett int decimalvärde ge olika resultat från dem som använder en direkt binär eller hexadecimal översättning, särskilt när ~ operatorn (bitvis INTE) används. Bitvis NOT-åtgärden kan inträffa på en variabel med kortare längd. I det här fallet, när den kortare längden konverteras till en längre datatypvariabel, kanske bitarna i de övre 8 bitarna inte anges till det förväntade värdet. Vi rekommenderar att du konverterar den mindre datatypvariabeln till den större datatypen och sedan utför åtgärden NOT på resultatet.

Examples

I följande exempel skapas en tabell med datatypen int för att lagra värdena och infogar de två värdena i en rad.

CREATE TABLE bitwise (  
  a_int_value INT NOT NULL,  
  b_int_value INT NOT NULL); 
GO  
INSERT bitwise VALUES (170, 75);  
GO  

Följande fråga utför bitvis INTE på kolumnerna a_int_value och b_int_value .

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

Här är resultatuppsättningen:

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

Den binära representationen av 170 (a_int_value eller A) är 0000 0000 0000 0000 0000 0000 1010 1010. Om du utför åtgärden BITVIS INTE på det här värdet genereras det binära resultatet 1111 1111 1111 1111 1111 1111 0101 0101, som är decimal -171. Den binära representationen för 75 är 0000 0000 0000 0000 0000 0000 0100 1011. Om du utför åtgärden BITVIS INTE genereras 1111 1111 1111 1111 1111 1111 1011 0100, vilket är 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  

See Also

Expressions (Transact-SQL)
Operators (Transact-SQL)
Bitvisoperatorer (Transact-SQL)