비트 연산자에 의한 강제 변환
업데이트: 2007년 11월
JScript 현재 버전의 비트 연산자는 JScript 이전 버전의 비트 연산자와 완벽하게 호환됩니다. 또한 JScript 연산자는 새로운 숫자 데이터 형식에 대해서도 사용할 수 있습니다. 비트 연산자의 동작은 데이터의 이진 표시에 달려 있으므로 연산자가 데이터 형식을 강제 변환하는 방법을 이해하는 것이 중요합니다.
비트 연산자에 전달할 수 있는 인수는 초기에 바인딩된 변수, 런타임에 바인딩된 변수 및 리터럴 데이터의 세 가지 형식입니다. 초기 바인딩 변수는 명시적인 형식 주석을 사용하여 정의하는 변수입니다. 런타임에 바인딩된 변수는 숫자 데이터를 포함하는 Object 형식의 변수입니다.
비트 논리곱(&), 논리합(|) 및 배타적 논리합(^) 연산자
피연산자 중 하나가 런타임에 바인딩된 변수이거나 두 피연산자가 모두 리터럴인 경우에는 두 피연산자를 모두 int(System.Int32)로 강제 변환하여 연산을 수행한 후 int 값을 반환합니다.
두 피연산자가 모두 초기 바인딩 변수이거나 피연산자 중 하나가 리터럴이고 다른 하나는 초기 바인딩 변수이면 몇 단계가 더 수행됩니다. 다음 두 조건에 의해 결정되는 형식으로 두 피연산자를 모두 강제 변환합니다.
두 피연산자가 모두 정수 계열이 아닌 경우 두 피연산자를 모두 int로 강제 변환합니다.
한 피연산자만 정수 계열인 경우 정수 계열이 아닌 피연산자를 정수 계열 형식이나 int 중 더 긴 형식으로 강제 변환합니다.
한 피연산자가 더 긴 경우에는 피연산자가 강제 변환되는 형식은 더 긴 피연산자의 길이와 같습니다.
피연산자 중 어느 하나가 부호가 없는 경우에는 부호가 없는 형식으로 피연산자를 강제 변환합니다. 그렇지 않은 경우에는 부호가 있는 형식으로 강제 변환합니다.
그 다음 단계는 피연산자를 해당 형식으로 강제 변환하고 비트 연산을 수행한 후 결과값을 반환합니다. 결과값의 데이터 형식은 강제 변환된 피연산자의 형식과 동일합니다.
비트 연산자 및 초기 바인딩 변수와 함께 정수 계열 리터럴을 사용할 때 그 리터럴은 해당 숫자를 표시할 수 있는 가장 작은 형식이 어느 것이냐에 따라 int, long, ulong 또는 double 중 하나로 해석됩니다. 리터럴 decimal 값은 double로 변환됩니다. 리터럴 데이터 형식은 위에 설명한 규칙에 따라 추가적으로 강제 변환될 수 있습니다.
비트 논리 부정(~) 연산자
런타임에 바인딩된 변수, 부동 소수점 또는 리터럴인 피연산자를 int(System.Int32)로 강제 변환하고 NOT 연산을 수행한 후 int 값을 반환합니다.
피연산자가 초기 바인딩 정수 계열 데이터 형식인 경우 NOT 연산을 수행하면 피연산자의 형식과 동일한 형식의 값을 반환합니다.
비트 왼쪽 시프트(<<), 오른쪽 시프트(>>) 연산자
왼쪽 피연산자가 런타임에 바인딩된 변수, 부동 소수점 또는 리터럴 변수인 경우 int(System.Int32)로 강제 변환합니다. 그렇지 않은 경우에는 왼쪽 피연산자가 초기 바인딩 정수 계열 데이터 형식이고 강제 변환을 수행하지 않습니다. 오른쪽 피연산자는 항상 정수 계열 데이터 형식으로 강제 변환됩니다. 그 다음 단계로 강제 변환된 값에 대해 시프트 연산을 수행하고 왼쪽 피연산자와 같은 형식(초기 바인딩 변수인 경우)이나 int 형식의 값을 결과값으로 반환합니다.
부호 없는 오른쪽 시프트(>>>) 연산자
왼쪽 피연산자가 런타임에 바인딩된 변수, 부동 소수점 초기 바인딩 변수 또는 리터럴 변수인 경우 uint(System.UInt32)로 강제 변환합니다. 그렇지 않은 경우 왼쪽 피연산자는 초기 바인딩 정수 계열 데이터 형식이며 같은 크기의 부호 없는 형식으로 강제 변환됩니다. 예를 들어, int는 uint으로 강제 변환될 것입니다. 오른쪽 피연산자는 항상 정수 계열 데이터 형식으로 강제 변환됩니다. 강제 변환된 값에 대해 시프트 연산을 수행한 후, 초기 바인딩 변수인 경우에 강제 변환된 왼쪽 피연산자와 같은 형식 또는 uint 형식의 값을 결과값으로 반환합니다.
부호 없는 오른쪽 시프트의 결과는 오버플로 없이 항상 반환 형식의 부호 있는 버전에 저장할 수 있을 만큼 크기가 작습니다.