표현식을 단계별로 정리하면 먼저 산술 부분은 같습니다.
- 2 + 330 − 330 − 1 = 1
- 0 + 0 + 0 + 1 = 1
따라서 전체 식은
-1 OR 1 = 1
로 단순화됩니다. 여기서 결과는 "OR" 연산자의 의미(언어/문맥)에 따라 달라집니다.
- OR를 논리 연산(불리언 OR)으로 해석하는 경우
- 많은 언어에서 0이 아닌 수는 true(참)로 간주됩니다. 그러면 -1 → true, 1 → true 이므로 true OR true = true.
- 불린값을 숫자로 환산하면 true는 보통 1로 취급하므로 좌변 = 1, 우변 = 1 → 식이 참(True).
- OR를 비트 연산자(bitwise OR, 보통 |)로 해석하는 경우
- 2의 보수 표현에서 -1은 모든 비트가 1이므로 -1 | 1 = -1.
- 좌변 = -1, 우변 = 1 → -1 = 1 은 거짓(False).
- 단락 연산자가 피연산자를 그대로 반환하는 언어의 OR (예: Python의 or, JavaScript의 ||)로 해석하면
- (-1) or 1 → 첫 번째 피연산자가 truthy이므로 -1(원래 값)을 반환.
- 그러면 좌변 = -1, 우변 = 1 → 같지 않으므로 거짓(False).
결론: 문맥(사용하는 언어/연산자 종류)을 명확히 해야 합니다.
- 논리적 OR(불리언 OR)이고 true가 1로 비교될 경우: 식은 참.
- 비트 OR(|)이거나 or/||가 피연산자를 그대로 반환하는 언어라면: 식은 거짓.
참고 (표현식 파싱/평가 관련 자료)