~(비트 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이 아니면 결과 비트는 값 0으로 지워집니다. 즉, 1은 0으로 변경되고 0은 1로 변경됩니다.
중요 |
---|
비트 연산을 수행할 때는 연산에 사용되는 식의 저장 길이가 중요합니다. 값을 저장할 때는 동일한 바이트 수를 사용하는 것이 좋습니다. 예를 들어 10진수 값 5를 tinyint, smallint 또는 int로 저장하면 바이트 수가 다르게 저장된 값이 생성됩니다. 데이터를 저장할 때 tinyint는 1바이트, smallint는 2바이트, int는 4바이트를 사용하여 저장합니다. 따라서 int 10진수 값에 비트 연산을 수행하면 직접 이진 또는 16진수 변환을 사용하는 것과 다른 결과가 생성될 수 있습니다. 특히 ~(비트 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 연산을 수행하면 10진수 -171에 해당되는 이진 결과 0000 0000 1110 1011이 생성됩니다. 75의 이진 표현은 0000 0000 0100 1011입니다. 비트 NOT 연산을 수행하면 1111 1111 1011 0100(10진수 -76)이 생성됩니다.
(~A)
0000 0000 1010 1010
-------------------
1111 1111 0101 0101
(~B)
0000 0000 0100 1011
-------------------
1111 1111 1011 0100