식에서 여러 작업이 발생하면 각 파트가 연산자 우선 순위라는 미리 결정된 순서로 평가되고 확인됩니다.
우선 순위 규칙
식에 둘 이상의 범주의 연산자가 포함된 경우 다음 규칙에 따라 계산됩니다.
산술 연산자와 연결 연산자는 다음 섹션에 설명된 우선 순위 순서를 가지며 모두 비교, 논리 및 비트 연산자보다 우선 순위가 더 큽니다. 우선 순위가 높을수록 이러한 연산자가 먼저 평가됩니다.
모든 비교 연산자는 동일한 우선 순위를 가지며 모두 논리 연산자 및 비트 연산자보다 우선 순위가 크지만 산술 연산자 및 연결 연산자보다 우선 순위가 낮습니다.
논리 연산자와 비트 연산자는 다음 섹션에서 설명하는 우선 순위 순서를 가지며, 모두 산술, 연결 및 비교 연산자보다 우선 순위가 낮습니다.
우선 순위가 같은 연산자는 식에 나타나는 순서대로 왼쪽에서 오른쪽으로 계산됩니다.
선행 순서
연산자는 다음 우선 순위 순서로 평가됩니다. 나열된 연산자는 우선 순위가 더 높으며 나중에 나열된 연산자보다 먼저 평가됩니다.
1. Await 연산자
기다리다
2. 산술 연산자 및 연결 연산자
지수(^)
단항 ID 및 부정(+, –)
곱하기 및 부동 소수점 나누기(*, /)
정수 나누기(\)
모듈식 산술(Mod)
더하기 및 빼기(+, –)
문자열 연결(&)
산술 비트 시프트(<<, >>)
3. 비교 연산자
모든 비교 연산자(=, ,<>, <<=, >, >=Is, IsNot, LikeTypeOf...Is)
4. 논리 및 비트 연산자
부정(Not)
연결(And, AndAlso)
포괄 분리(Or, OrElse)
배타적 분리(Xor)
코멘트
= 연산자는 대입 연산자가 아니라 같음 비교 연산자일 뿐입니다.
문자열 연결 연산자(&)는 산술 연산자가 아니지만 우선적으로 산술 연산자를 사용하여 그룹화됩니다.
Is 및 IsNot 연산자는 개체 참조 비교 연산자입니다. 두 개체의 값은 비교하지 않습니다. 두 개체 변수가 동일한 개체 인스턴스를 참조하는지 여부만 확인합니다.
연관성
같은 우선 순위의 연산자가 식에 함께 나타나는 경우(예: 곱하기 및 나누기) 컴파일러는 각 연산이 왼쪽에서 오른쪽으로 발생할 때 각 연산을 평가합니다. 다음 예제에서는 이를 보여 줍니다.
Dim n1 As Integer = 96 / 8 / 4
Dim n2 As Integer = (96 / 8) / 4
Dim n3 As Integer = 96 / (8 / 4)
첫 번째 식은 나누기 96/8(결과 12)을 계산한 다음, 나누기 12/4를 계산하여 3을 생성합니다. 컴파일러는 왼쪽에서 오른쪽으로 작업을 n1 평가하므로 해당 순서가 명시적으로 표시될 n2때 평가는 동일합니다. 둘 다 n1 3 n2 의 결과가 있습니다. 반면, n3 괄호는 컴파일러가 8/4를 먼저 평가하도록 강제하기 때문에 48의 결과를 줍니다.
이 동작으로 인해 연산자는 Visual Basic에서 연관성이 남아 있다고 합니다.
우선 순위 및 결합성 재정의
괄호를 사용하여 식의 일부 부분을 다른 부분 앞에 강제로 계산할 수 있습니다. 우선 순위와 왼쪽 결합성을 모두 재정의할 수 있습니다. Visual Basic은 항상 외부에 괄호로 묶인 작업을 수행합니다. 그러나 괄호 내에서 괄호 안에 괄호를 사용하지 않는 한 일반적인 우선 순위와 결합성을 유지합니다. 다음 예제에서는 이를 보여 줍니다.
Dim a, b, c, d, e, f, g As Double
a = 8.0
b = 3.0
c = 4.0
d = 2.0
e = 1.0
f = a - b + c / d * e
' The preceding line sets f to 7.0. Because of natural operator
' precedence and associativity, it is exactly equivalent to the
' following line. Division and multiplication (/, *) have higher
' precedence than addition and subtraction (+, -), so c / d * e
' is evaluated first, then the addition and subtraction from left to right.
f = (a - b) + ((c / d) * e)
' The following line overrides the natural operator precedence
' and left associativity.
g = (a - (b + c)) / (d * e)
' The preceding line sets g to 0.5.
참고하십시오
.NET