~ (位元 NOT) (Transact-SQL)
在整數值上,執行位元邏輯 NOT 運算。
語法
~ expression
引數
expression
這是整數資料類型類別目錄之任何資料類型、bit 或 binary 或 varbinary 資料類型的任何有效運算式。expression 是當作位元運算的二進位數來處理的。
附註: |
---|
在位元運算中,只有一個 expression 可以是 binary 或 varbinary 資料類型。 |
結果類型
如果輸入值是 int,便是 int。
如果輸入值是 smallint,便是 smallint。
如果輸入值是 tinyint,便是 tinyint。
如果輸入值是 bit,便是 bit。
備註
~ 位元運算子會執行 expression 的位元邏輯 NOT 運算,依次處理每個位元。如果 expression 的值是 0,結果集中的位元便設為 1;否則,則清除結果中的位元成為 0 值。換言之,一會改成零,零會改成一。
重要事項: |
---|
當您執行任何種類的位元運算時,位元運算所用的運算式儲存長度非常重要。我們建議您在儲存值時,使用這個相同的位元組數。例如,將小數點值 5 儲存成 tinyint、smallint 或 int,會產生用不同位元組數目來儲存的值:tinyint 會利用 1 位元組來儲存資料;smallint 會利用 2 位元組來儲存資料;int 會利用 4 位元組來儲存資料。因此,在 int 十進位值上執行位元運算,與使用直接二進位或十六進位轉換,可能會產生不同的結果,當使用 ~ (位元 NOT) 運算子時,尤其如此。位元 NOT 運算可能發生在長度較短的變數上。在這個情況下,當較短的長度轉換成較長的資料類型變數時,上面 8 位元中的位元可能不會設為預期的值。我們建議您將較小的資料類型變數轉換成較長的資料類型,之後,在結果上執行 NOT 運算。 |
範例
下列範例會利用 int 資料類型建立資料表來儲存值以及將兩個值插入單一資料列中。
USE tempdb;
GO
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'bitwise')
DROP TABLE bitwise;
GO
CREATE TABLE bitwise
(
a_int_value int NOT NULL,
b_int_value int NOT NULL
);
GO
INSERT bitwise VALUES (170, 75);
GO
下列查詢在 a_int_value
和 b_int_value
資料行上執行位元 NOT 運算。
USE tempdb;
GO
SELECT ~ a_int_value, ~ b_int_value
FROM bitwise;
結果集如下:
--- ---
-171 -76
(1 row(s) affected)
170 (a_int_value
或 A
) 的二進位表示法是 0000 0000 1010 1010
。在這個值上執行位元 NOT 運算會產生二進位結果 1111 1111 0101 0101
,也就是十進位的 -171。75 的二進位表示法是 0000 0000 0100 1011
。執行位元 NOT 運算會產生 1111 1111 1011 0100
,也就是十進位的 -76。
(~A)
0000 0000 1010 1010
-------------------
1111 1111 0101 0101
(~B)
0000 0000 0100 1011
-------------------
1111 1111 1011 0100
請參閱
參考
運算式 (Transact-SQL)
運算子 (Transact-SQL)