共用方式為


~ (位元 NOT) (Transact-SQL)

適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點Microsoft網狀架構倉儲中的 Microsoft Fabric SQL 資料庫Microsoft網狀架構

在整數值上,執行位元邏輯 NOT 運算。

Transact-SQL 語法慣例

語法

~ expression  

引數

expression
這是整數資料類型類別目錄之任何資料類型或是 bitbinaryvarbinary 資料類型的任何有效運算式expression 會被視為適用於位元運算的二進位數字。

注意

在位元運算中,只能有一個 expressionbinaryvarbinary 資料類型。

結果類型

如果輸入值為 int,則為 int

如果輸入值為 smallint,則為 smallint

如果輸入值為 tinyint,則為 tinyint

如果輸入值為 bit,則為 bit

備註

~ 位元運算子會執行 expression 的位元邏輯 NOT 運算,依次處理每個位元。 如果 expression 的值為 0,結果集內的位元就會設定為 1;否則,結果中的位元會清除為 0 值。 換句話說,1 會變更為零,零則會變更為 1。

重要

當您執行任何種類的位元運算時,位元運算所用的運算式儲存長度非常重要。 我們建議您在儲存值時,使用這個相同的位元組數。 例如,將十進位值 5 儲存成 tinyintsmallintint ,會產生以不同位元組數儲存的值:tinyint 會使用 1 個位元組來儲存資料;smallint 會使用 2 個位元組來儲存資料;int 會使用 4 個位元組來儲存資料。 因此,在 int 十進位值上執行位元運算,與使用直接二進位或十六進位轉譯,可能會產生不同的結果,當使用 ~ (位元 NOT) 運算子時,尤其如此。 位元 NOT 運算可能發生在長度較短的變數上。 在這個情況下,當較短的長度轉換成較長的資料類型變數時,上面 8 位元中的位元可能不會設為預期的值。 我們建議您將較小的資料類型變數轉換成較長的資料類型,之後,在結果上執行 NOT 運算。

範例

下列範例會使用 int 資料類型來建立資料表以儲存值,並將兩個值插入到單一資料列中。

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

下列查詢在 a_int_valueb_int_value 資料行上執行位元 NOT 運算。

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

以下為結果集:

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

170 (a_int_valueA) 的二進位表示法是 0000 0000 0000 0000 0000 0000 1010 1010。 對這個值執行位元 NOT 運算,會產生二進位結果 1111 1111 1111 1111 1111 1111 0101 0101,也就是十進位的 -171。 75 的二進位表示是 0000 0000 0000 0000 0000 0000 0100 1011。 執行位元 NOT 運算會產生 1111 1111 1111 1111 1111 1111 1011 0100,也就是十進位的 -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  

另請參閱

運算式 (Transact-SQL)
運算子 (Transact-SQL)
位元運算子 (Transact-SQL)