논리연산
논리연산(逻辑运算, Logical Operation)은 주로 논리곱(AND), 논리합(OR), 논리 부정(NOT) 등의 기호 논리학의 규칙에 따른 연산이다. 불 대수(Boolean algebra)는 19세기 중반 영국의 수학자 조지 불(George Boole, 1815년 11월 2일 ~ 1864년 12월 8일)이 고안하고 형식화한 대수 체계를 의미한다. 논리연산(logical operation, logical connective)으로도 불린다. 수리 논리학이나 컴퓨터공학과에서, 두 개의 상태인 참(1, T, True)과 거짓(0, F, False)으로 불 연산(Boolean expression)이라 한다. 참고로 백괴사전에서는 이 불 대수를 불(火) 대수로 해석해서 불 붙은 물건의 성질을 다루는 대수로 묘사했다. 불 대수의 출현 이후로 논리학은 기호논리학의 성향이 강해지기 시작한다.
프로그래밍에서는 조건에 의한 분기나 반복을 만드는데 이용되고, 디지털 논리 회로를 배울 때 유용하게 사용된다. 디지털 회로의 신호는 0과 1로 구성되어 있기 때문이다. 전자계통에선 논리연산을 하는 소자를 게이트(Gate)라고 하며 트랜지스터 여러 개를 조합해서 만들 수 있다.
이산수학에서는 속(Lattice) 중 Complementary Lattice이며 Distributive Lattice인 Lattice를 불 속(Boolean Lattice)이라 하며 이를 대수(Algebra)식으로 나타낸 것을 불 대수(Boolean Algebra)라고 한다. 불 속의 원소 개수는 해당 원자(atom) 개수 n에 대해 2n개이다. 즉, 불 속의 원소 개수는 2의 제곱수대로 올라간다고 보면 된다.
논리연산의 예시
예를 들어, "6<3’그리고 '10>6'"과 같은 논리연산은 "6<3"이 거짓이고 "10>6"이 참이므로 결과는 거짓이다. "'6<3' 또는 '10>6'"과 같은 논리연산은 "6<3"이 거짓이고 "10>6"이 참이므로 결과는 참이다. 또한 "'6<3'이 아니다"와 같은 논리연산은 "6<3"이 거짓이므로 결과는 참이다. 이와 같은 논리연산을 블록 기반 프로그래밍 도구로 작성한 예는 오른쪽과 같다.
설명
논리 연산에서 처리되어지는 자료들(피연산자)은 논리값이며, 연산의 결과도 논리값이다. 주로 관계 연산들을 합성하는 데 사용되며, 관계 연산과 마찬가지로 반복 구조의 반복 조건 및 선택 구조의 조건에 사용되는데 논리 연산은 복합 조건을 만드는 데 사용된다.
"그리고"는 논리곱 연산으로 연산자 양쪽의 항목(피연산자)이 모두 참일 때만 결과가 참이며, 둘 중의 어느 하나가 거짓이거나 둘 모두가 거짓이면 결과는 거짓이 된다. "또는"은 논리합 연산으로 연산자 양쪽의 항목(피연산자)이 모두 거짓일 때만 결과가 거짓이며, 둘 중의 어느 하나가 참이거나 둘 모두가 참이면 결과는 참이 된다. "가(이) 아니다"는 논리 부정 연산으로 항목(피연산자)이 참이면 결과는 거짓이 되고, 항목(피연산자)이 거짓이면 결과는 참이 된다.
논리연산의 종류
부정 (NOT; ¬)
말 그대로 부정(否定)이다. 즉, 참과 거짓을 뒤집는다. C언어의 영향을 받은 프로그래밍 언어에서는 일반적으로 !를 부정 연산자로 사용하며, 그 외에 ~A도 많은 프로그래밍 언어에서 사용되며, 필기나 서적 등에서는 A' 또는 A 위에 ㅡ를 그려넣은 기호가 주로 쓰인다. 불 보수(Boolean Complement)로도 불린다. 이 연산을 하는 회로는 따로 보수기(inverter)라는 이름으로 불린다.
논리곱 (AND; ∧)
두 명제가 모두 참이어야 참값을 돌려준다. C언어의 영향을 받은 프로그래밍 언어에서는 일반적으로 &를 논리곱 연산자로 사용하며, 불 대수에서는 AND는 곱셈과 동치이다. 불 곱(Boolean Multiplication) 혹은 논리곱이라 부른다. 아래의 연산결과를 보면 왜 곱셈과 동치인지 쉽게 알 수 있을 것이다. AB 또는 A·B로 표시한다.
논리합 (OR; ∨)
두 명제 중 어느 한 명제만 참이어도 참값을 돌려준다. C언어의 영향을 받은 프로그래밍 언어에서는 일반적으로 |를 논리합 연산자로 사용한다. 불 대수에서는 OR는 덧셈과 동치여서, 논리합(Boolean Addition)으로 부른다. 아래에서 보듯 1 + 1 = 1 임을 주의해야 한다. A+B로 표시한다.
부정 논리곱 (NAND; ↑)
Not AND. 논리곱의 결과값을 부정한 것이다. 즉, 두 명제가 모두 참이면 거짓값을 돌려주고 그 외에는 참값을 돌려준다. 참고로 NAND만을 통해 다른 논리 연산식을 모조리 구현할 수 있기 때문에 현재 사용되는 플래시 메모리들은 대부분이 NAND 회로로 구성되어 있다.