~ (Bitwise NOT) (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Bitenkénti logikai NOT műveletet hajt végre egész számértéken.

Transact-SQL szintaxis konvenciók

Syntax

~ expression

Arguments

expression

Az egész szám adattípus kategória, a bit vagy a bináris vagy varbináris adattípusok bármelyikének érvényes kifejezése. a bitenkénti művelet bináris számként kezeli.

Note

Egy bitenkénti műveletben csak egy kifejezés lehet bináris vagy varbináris adattípusú.

Visszatérési típusok

int , ha a bemeneti értékek int.

kicsi, ha a bemeneti értékek kicsik.

tinyint , ha a bemeneti értékek aprók.

bit , ha a bemeneti értékek bitek.

Remarks

A ~ bitenkénti operátor bitenkénti logikai NOT műveleteket hajt végre a kifejezéshez, és az egyes biteket egymás után veszi. Ha a kifejezés értéke 0a következő, az eredményhalmaz bitjei a következőre 1vannak állítva: . Ellenkező esetben az eredmény bitje a következő értékre 0lesz törölve: . Más szóval a nullák nullákra változnak, a nullák pedig a nullákra.

Important

Ha bármilyen bitenkénti műveletet hajt végre, a bitenkénti műveletben használt kifejezés tárolási hossza fontos. Az értékek tárolásakor azt javasoljuk, hogy ugyanannyi bájtot használjon. Ha például az 5-ös tizedesjegyet apró,kicsi vagy int értékként tárolja, akkor az érték különböző bájtszámmal van tárolva: a tinyint 1 bájttal tárolja az adatokat; a smallint 2 bájt használatával tárolja az adatokat, a int pedig 4 bájttal tárolja az adatokat. Ezért a bitenkénti művelet int decimális értéken történő végrehajtása eltérő eredményeket eredményezhet a közvetlen bináris vagy hexadecimális fordítást használóktól, különösen akkor, ha a ~ (bitenkénti NOT) operátort használja. A bitenkénti NOT művelet rövidebb hosszúságú változókon is előfordulhat. Ebben az esetben, ha a rövidebb hossz hosszabb adattípusú változóvá alakul át, előfordulhat, hogy a felső 8 bit bitjei nem a várt értékre lesznek állítva. Javasoljuk, hogy konvertálja a kisebb adattípus változót a nagyobb adattípusra, majd hajtsa végre a NOT műveletet az eredményen.

Examples

Az alábbi példa egy táblázatot hoz létre az int adattípussal az értékek tárolásához, és a két értéket egy sorba szúrja be.

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

INSERT bitwise
VALUES (170, 75);
GO

Az alábbi lekérdezés a bitenkénti NOT műveletet hajtja végre az oszlopokon és b_int_value az a_int_value oszlopokon.

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

Itt van az eredmények összessége.

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

A 170 (a_int_value vagy A) bináris ábrázolása az 0000 0000 0000 0000 0000 0000 1010 1010. Ha ezen az értéken bitenkénti NOT műveletet hajt végre, a bináris eredményt 1111 1111 1111 1111 1111 1111 0101 0101hozza létre , amely decimális -171. A 75 bináris reprezentációja a 0000 0000 0000 0000 0000 0000 0100 1011. A bitenkénti NOT művelet végrehajtása -76 tizedesjegyet eredményez 1111 1111 1111 1111 1111 1111 1011 0100.

 (~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