~ (ビット演算子 NOT) (Transact-SQL)~ (Bitwise NOT) (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

整数値に対してビットごとの論理否定演算を実行します。Performs a bitwise logical NOT operation on an integer value.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

~ expression  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

式 (expression)expression
整数データ型に分類されるデータ型のいずれか、または bit、または binary または varbinary データ型の有効な を指定します。Is any valid expression of any one of the data types of the integer data type category, the bit, or the binary or varbinary data types. は、ビットごとの演算に対して 2 進数として扱われます。expression is treated as a binary number for the bitwise operation.

注意

ビットごとの演算では、1 つの のみが binary または varbinary データ型のいずれかになります。Only one expression can be of either binary or varbinary data type in a bitwise operation.

戻り値の型Result Types

入力値が int の場合は int です。int if the input values are int.

入力値が smallint の場合は smallint です。smallint if the input values are smallint.

入力値が tinyint の場合は tinyint です。tinyint if the input values are tinyint.

入力値が bit の場合は bit です。bit if the input values are bit.

解説Remarks

ビットごとの ~ 演算子は、各ビットを対象に に対してビットごとの論理否定演算を順番に実行します。The ~ bitwise operator performs a bitwise logical NOT for the expression, taking each bit in turn. の値が 0 の場合は、結果セット内のビットが 1 に設定されます。0 以外の場合は、結果セット内のビットがクリアされて値が 0 になります。If expression has a value of 0, the bits in the result set are set to 1; otherwise, the bit in the result is cleared to a value of 0. つまり、1 は 0 に、0 は 1 に変更されます。In other words, ones are changed to zeros and zeros are changed to ones.

重要

どのような種類のビットごとの演算を実行する場合でも、演算の中で使用される式の記憶域の長さが重要になります。When you perform any kind of bitwise operation, the storage length of the expression used in the bitwise operation is important. 値を格納するときは、式のデータ型と同じバイト数を使用するようにしてください。We recommend that you use this same number of bytes when storing values. たとえば、10 進数の 5 を tinyint 型、smallint 型、または int 型として格納すると、値はそれぞれ異なるバイト数で格納されます。つまり、tinyint の場合は 1 バイト、smallint の場合は 2 バイト、int の場合は 4 バイトをそれぞれ使用してデータが格納されます。For example, storing the decimal value of 5 as a tinyint, smallint, or int produces a value stored with different numbers of bytes: tinyint stores data using 1 byte; smallint stores data using 2 bytes, and int stores data using 4 bytes. このため、int 型の 10 進数でビットごとの演算を実行すると、バイナリで直接実行する場合や、16 進数に変換して実行する場合とは異なる結果が得られる可能性があります。この傾向は、~ (ビットごとの NOT) 演算子において特に顕著です。Therefore, performing a bitwise operation on an int decimal value can produce different results from those using a direct binary or hexadecimal translation, especially when the ~ (bitwise NOT) operator is used. また、長さが短い方の変数に対してビットごとの NOT 演算が実行される場合があります。The bitwise NOT operation may occur on a variable of a shorter length. この場合、短い長さが、長いデータ型の変数に変換されると、上位 8 ビットのビットが予想値に設定されない場合があります。In this case, when the shorter length is converted to a longer data type variable, the bits in the upper 8 bits may not be set to the expected value. 短いデータ型を長いデータ型に変換し、その結果に対して NOT 演算を実行するようにしてください。We recommend that you convert the smaller data type variable to the larger data type, and then perform the NOT operation on the result.

Examples

次の例では、int 型で値を格納するテーブルを作成し、1 行に 2 つの値を挿入します。The following example creates a table using the int data type to store the values and inserts the two values into one row.

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 を実行します。The following query performs the bitwise NOT on the a_int_value and b_int_value columns.

SELECT ~ a_int_value, ~ b_int_value  
FROM bitwise;  

結果セットは次のようになります。Here is the result set:

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

170 (a_int_value または A) をバイナリで表すと、0000 0000 1010 1010 になります。The binary representation of 170 (a_int_value or A) is 0000 0000 1010 1010. この値に対してビットごとの NOT 演算を実行すると、結果はバイナリで 1111 1111 0101 0101、10 進数では -171 になります。Performing the bitwise NOT operation on this value produces the binary result 1111 1111 0101 0101, which is decimal -171. 75 をバイナリで表すと 0000 0000 0100 1011 になります。The binary representation for 75 is 0000 0000 0100 1011. ビットごとの NOT 演算を実行すると、結果は 1111 1111 1011 0100、10 進数では -76 になります。Performing the bitwise NOT operation produces 1111 1111 1011 0100, which is decimal -76.

 (~A)     
         0000 0000 1010 1010  
         -------------------  
         1111 1111 0101 0101  
(~B)     
         0000 0000 0100 1011  
         -------------------  
         1111 1111 1011 0100  

参照See Also

式 (Transact-SQL) Expressions (Transact-SQL)
演算子 (Transact-SQL) Operators (Transact-SQL)
ビットごとの演算子 (Transact-SQL)Bitwise Operators (Transact-SQL)