연산자
우선순위가 높은 것부터 나열합니다. 모든 이항 연산자는 왼쪽 결합입니다: a - b - c는
(a - b) - c입니다.
| 수준 | 연산자 | 의미 | 피연산자 형식 |
|---|---|---|---|
| 1 | ( ) f(…) | 그룹화, 기본 제공 함수 호출 | |
| 2 | ! - ~(단항) | 논리 부정, 부호 반전, 비트 부정 | !: 모든 형식 · -: Integer/Real · ~: Integer |
| 3 | * / | 곱하기, 나누기 | Integer/Real |
| 4 | + - | 더하기 또는 연결, 빼기 | Integer/Real 또는 Text + Text |
| 5 | << >> | 왼쪽 시프트, 산술 오른쪽 시프트 | Integer |
| 6 | < <= > >= | 순서 비교 | 두 숫자 또는 두 Text |
| 7 | == != | 같음 비교 | 모든 형식 |
| 8 | & | 비트 AND | Integer |
| 9 | ^ | 비트 XOR | Integer |
| 10 | | | 비트 OR | Integer |
| 11 | && | 논리 AND(양쪽이 항상 평가됨) | 모든 형식(참/거짓 판정) |
| 12 | || | 논리 OR(양쪽이 항상 평가됨) | 모든 형식(참/거짓 판정) |
나머지(%), 거듭제곱 연산자, 삼항 연산자(?:), 쉼표 연산자는 없습니다.
경고
&&와 ||는 단락 평가를 하지 않습니다. 두 피연산자는 항상 왼쪽, 오른쪽 순서로 모두 평가됩니다.
왼쪽이 이미 결과를 결정했더라도 오른쪽의 기본 제공 함수 호출은 실행되며, 그 호출이 실패하면 작업이
중지됩니다. 대신 중첩된 if로 보호하십시오.
text = ClipboardGetText();
idx = StringGetIndexOf(text, ":");
// 잘못됨: idx가 -1이어도 StringGetSubstring(text, -1, 5)가 실행되어 작업이 중지됩니다
// if (idx >= 0 && StringGetSubstring(text, idx, 5) == ":here") { ... }
// 올바름: 두 번째 검사는 첫 번째 검사가 참일 때만 실행됩니다
if (idx >= 0) {
if (StringGetSubstring(text, idx, 5) == ":here") UtilityPrint("found");
}
경고
비트 연산자는 비교 연산자보다 우선순위가 낮습니다(C와 같음). flags & 4 == 4는
flags & (4 == 4), 즉 flags & true로 해석되어 0이 됩니다. 마스크는 항상 괄호로 감싸십시오:
(flags & 4) == 4 또는 (flags & 4) != 0.
경고
비교는 연쇄되지 않습니다. 0 < x < 10은 (0 < x) < 10으로 해석되어 Bool과 Integer를
비교하므로 항상 false입니다. x > 0 && x < 10으로 작성하십시오.