기본 자료형 Boolean과 불 대수, 단축 평가
불 자료형이란?
불 자료형과 논리 연산자
논리 연산자 | 설명 |
---|
&& | 논리식이 모두 참이면 참 반환 (이항연산자) |
|| | 논리식 중 하나라도 참이면 참 반환 (이항연산자) |
! | 논리식의 값과 반대인 값을 반환 (단항연산자) |
- 논리 연산자 &&과 ||은 좌우측에 참 혹은 거짓을 값으로 갖는 표현식 둘을 피연산자로 갖습니다.
- 논리 연산자 !은 우측에 참 혹은 거짓을 값으로 갖는 표현식 하나를 피연산자로 갖습니다.
- 그런데, 불 자료형에는 연산 값이 사용될 수도 있습니다.
- 9 > 1 : true
- 1 == 0 : false
- "a".equals("z") : false
- 1 : true / 0: false
불 대수 법칙
Table 1. Boolean Algebra Simplificaiton |
---|
|
- 동일 법칙
- 참 혹은 거짓을 값으로 갖는 A에 1(참)을 AND 연산하면 그 값이 유지되고, 0(거짓)을 OR 연산해도 그 값이 유지됩니다.
- 부정 법칙
- 특정 값에 0을 AND 연산하면 항상 거짓이고, 1을 OR 연산하면 항상 참입니다.
- 등멱 법칙
- 특정 값에 그 값을 AND 연산하거나, OR 연산하면 값이 유지됩니다.
- 상보 법칙
- 특정 값과 그 반대 값을 AND 연산하면 항상 거짓, OR 연산하면 항상 참입니다.
- 교환 법칙
- AND 연산과 OR 연산에서 피연산자 순서를 바꾸어도 결과는 같습니다.
- 결합 법칙
- AND 연산과 OR 연산에서 연산 순서를 바꾸어도 결과는 같습니다.
- 분배 법칙
- 불 대수에서는, AND 연산과 OR 연산으로 얽힌 식에서 분배 법칙을 이용해 식을 간략히 할 수 있습니다.
- 흡수 법칙
- 두 피연산자가 포함 관계에 있다면, AND 연산에서는 부분 집합이, OR 연산에서는 상위 집합이 결과값이 됩니다.
- 드모르간 법칙
- 특정 식에 부정 연산을 할 경우, 각 변수에는 NOT 연산을 한다. 그리고 AND 연산은 OR 연산으로, OR 연산은 AND 연산으로 바꾸어 풀어줄 수 있습니다.
쌍대 원리 (Duality Principle)
- 불리언 식의 쌍대(dual)는 해당 식에서 AND/OR, 1/0 을 서로 교체해 줌으로써 만들 수 있습니다. 이 때, 한 식의 쌍대는 원래의 식과 결과 값이 동일합니다.
- 1+0=1 과 0⋅1=0
단축 평가 (short-circuit evaluation)
- 단축 평가는 프로그래밍 언어에서 첫 인자(argument)가 표현식(expression) 값 결정에 부족할 때에만 두 번째 인자가 실행되거나 평가되는 방법을 의미합니다.
if (a && b) {
...
}
if (a || b) {
...
}
-
XOR의 경우에는, 당연하게도 두 피연산자를 모두 비교해봐야 하는 까닭에 short-circuit이 불가능합니다.
- 자바 논리 연산자로는 XOR이 존재하지 않지만, (추후 글을 쓸) 비트 연산자에서는 ^가 XOR 역할을 합니다.
-
단축 평가는 특정 함수를 호출하거나 하지 않는 흐름 제어에서 효과적이지만, 표현식 실행 이후 값이 달라지는 side-effect가 중요한 언어에서는 주의할 필요가 있습니다. 첫 argument 이후 갱신된 값이 두 번째 argument에서 쓰이기 때문입니다.
-
또한, 분기 예측(Branch Prediction) 내에서 오류를 일으킬 수 있습니다. 분기 예측은 다음 실행될 조건문이 어떤 것으로 분기할 것인지 확실히 알기 전에 예측하는 CPU 기술입니다. (어려운 내용이니, 나중에 기회가 되면 살펴보겠습니다.)
참고자료 References
Table 1.
https://www.electronics-tutorials.ws/boolean/boolean-algebra-simplification.html
https://homubee.tistory.com/31
https://www.cs.fsu.edu/~lacher/courses/MAD3105/lectures/s4_1boolfn.pdf
https://en.m.wikipedia.org/wiki/Boolean_algebra#Duality_principle
https://en.m.wikipedia.org/wiki/Short-circuit_evaluation