요소별 불리언 연산자
요소별 불리언 연산자 (Element-by-element Boolean Operators)
요소별 불리언 표현식은 비교 표현식을 불리언 연산자로 조합한 것입니다. "or"는 |, "and"는 &, "not"은 !를 쓰고 괄호로 중첩을 제어해요. Octave 매뉴얼 8.5.1절을 정리해 볼게요.
본문
요소별 불리언 표현식의 참/거짓은 구성 요소 표현식의 대응하는 원소들의 참값을 결합해 계산됩니다. 값이 0이면 거짓, 그 외에는 참으로 간주해요.
요소별 불리언 표현식은 비교 표현식을 쓸 수 있는 곳 어디든 사용할 수 있어요. if와 while 문에도 쓸 수 있죠. 다만 if나 while 문의 조건으로 쓰인 행렬 값은, 그 모든 원소가 0이 아닐 때만 참입니다.
비교 연산처럼, 요소별 불리언 표현식의 각 원소도 수치 값을 가져요(참이면 1, 거짓이면 0). 이 값은 불리언 표현식의 결과가 변수에 저장되거나 산술에 사용될 때 그대로 쓰입니다.
세 가지 요소별 불리언 연산자에 대한 설명입니다.
boolean1 & boolean2 — boolean1과 boolean2의 두 대응 원소가 모두 참이면 결과의 원소가 참.
boolean1 | boolean2 — boolean1 또는 boolean2의 대응 원소 중 하나라도 참이면 결과의 원소가 참.
! boolean / ~ boolean — boolean의 대응 원소가 거짓이면 결과의 각 원소가 참.
이 연산자들은 요소별로 동작해요. 예를 들어 표현식
[1, 0; 0, 1] & [1, 0; 2, 3]
은 2×2 단위행렬을 반환합니다.
이진 연산자에는 방송(broadcasting) 규칙이 적용돼요 (Broadcasting 참고). 특히 한 연산자가 스칼라이고 다른 쪽이 행렬이면, 그 연산자가 스칼라와 행렬의 각 원소에 적용됩니다.
이진 요소별 불리언 연산자에서는 결과를 계산하기 전에 두 부분 표현식 boolean1과 boolean2를 모두 평가해요. 이는 표현식에 부작용(side effect)이 있을 때 차이를 만들 수 있어요. 예를 들어 표현식 a & b++에서는 변수 a가 0이어도 변수 b의 값이 증가해요. 이 동작은 불리언 연산자가 행렬 값 연산자로 설명된 대로 동작하는 데 필요합니다.
and
TF = and (x, y)
TF = and (x1, x2, …)
x와 y의 논리 AND를 돌려줍니다. 연산자 구문 x & y와 동등해요. 인자가 두 개보다 많으면 논리 AND가 왼쪽에서 오른쪽으로 누적 적용됩니다:
(...((x1 & x2) & x3) & ...)
See also: or, not, xor.
not
z = not (x)
x의 논리 NOT을 돌려줍니다. 연산자 구문 ! x와 동등해요.
See also: and, or, xor.
or
TF = or (x, y)
TF = or (x1, x2, …)
x와 y의 논리 OR을 돌려줍니다. 연산자 구문 x | y와 동등해요. 인자가 두 개보다 많으면 논리 OR이 왼쪽에서 오른쪽으로 누적 적용됩니다:
(...((x1 | x2) | x3) | ...)
See also: and, not, xor.
더 알아보기
- octave-short-circuit-boolean-operators — 단락 불리언 연산자
- octave-comparison-ops — 비교 연산자
- octave-statements — 조건·반복문 (별도 문서)