"배타적 논리합"의 두 판 사이의 차이
(→특징) |
잔글 |
||
(사용자 2명의 중간 판 89개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''배타적 논리합'''(排他的論理合, exclusive or)은 수리 논리학에서 주어진 2개의 명제 가운데 1개만 참일 경우 판단하는 논리 | + | '''배타적 논리합'''<!--배타적논리합-->(排他的論理合, '''XOR''', exclusive or)은 수리 논리학에서 주어진 2개의 명제 가운데 1개만 참일 경우 판단하는 논리 연산이며, 약칭으로 XOR, EOR, EXOR이라고 쓴다. exclusive OR, exclusive NOR, 보통 exclusive의 e나 x를 따와서 EOR 또는 XOR로 표기하는데, 보통 XOR로 많이 사용한다. exclusive는 '배타적'이라는 뜻으로, 우리들은 일상속에서 남을 배척하는 것을 보통 배타적이라고 말한다. X, Y가 0또는 1인 값을 가질 때, X와 Y의 배타적 논리합을 X<font>⊕</font>Y로 표현할 수 있다. X와 Y의 값이 같을 때 X<font>⊕</font>Y=0, 값이 다를 때 X<font>⊕</font>Y=1로 출력된다. |
+ | |||
+ | 연산자는 <font>⊻</font>, ⩒ 이다. 혼동이 되지 않을 경우 XOR, xor, <font>⊕</font>, <font>+</font>, <font>≠</font>라고도 쓴다. 추가로 컴퓨터 프로그래밍 등에서 응용 수학으로 비트간 배타적 논리합(bitwise exclusive or)을 간단히 배타적 논리합, XOR이라고 부르는 경우가 있다. 연산자는 XOR, xor, <font>⊕</font>, ^ 등을 사용한다. | ||
== 특징 == | == 특징 == | ||
− | 배타적 논리합은 | + | 배타적 논리합은 논리곱(<font>⋀</font>), 분리(<font>⋁</font>), 부정(<font>¬</font>)을 사용하여<br> |
− | <math> P<font>⊻</font>Q=(<font>P⋀¬</font>Q)<font>⋁</font> | + | <math> P </math><font> ⊻ </font><math>Q </math><math>=</math><math>(P</math> <font>⋀</font> <font>¬</font><math>Q)</math><font> ⋁ </font><math>(</math><font>¬</font><math>P </math><font> ⋀ </font><math> Q)</math><br> |
+ | <math> P </math><font> ⊻ </font><math>Q </math><math>=</math><math>(P</math> <font>⋁</font> <math>Q)</math><font> ⋀ </font><math>(</math><font>¬</font><math>P </math><font> ⋁ ¬</font><math> Q)</math><br> | ||
+ | <math> P </math><font> ⊻ </font><math>Q </math><math>=</math><math>(P</math> <font>⋁ </font> <math>Q)</math><font> ⋀ ¬</font><math>(</math><math>P </math><font> ⋀ </font><math> Q)</math> | ||
+ | 라고 표현할 수 있다. | ||
+ | |||
+ | 2를 몫으로 하는 잉여류체<font>ℤ</font>/<math>[2]</math>의 가감산(덧셈과 뺄셈이 같다)은 0을 거짓, 1을 참으로 생각하면 배타적 논리합이 된다. | ||
+ | === 대체 기호 === | ||
+ | 배타적 분리에 사용되는 기호는 응용 분야마다 다르고 주어진 논의 상황에서 강조되는 속성에 따라 달라진다. 약아 "XOR" 이외에도 표시된다. | ||
+ | * <math>+</math> : 더하기 부호는 수학링과 필드의 모든 일반적인 대수적 속성은 추가하지 않고도 사용할 수 있다는 장점이 있지만, 더하기 기호는 또한 일부 표기 시스템에서 포괄적 분리에 사용된다. | ||
+ | * <font>⊕</font> : 이 기호는 수학에서 대수적 구조의 직접전인 합으로도 사용된다. | ||
+ | * <font>⊻</font>, ⩒ : 포괄적인 분리 기호이다. | ||
+ | <table border="1" style="text-align:center;" width=300> | ||
+ | <caption><b>진리표</b></caption> | ||
+ | <tr bgcolor="" style=font-weight:bold;"> | ||
+ | <td>명제 <I>P</I><td>명제 <I>Q</I><td><I>P</I><font> ⊻</font> <I>Q</I> </tr> | ||
+ | <tr> | ||
+ | <td>1<td>1<td><b>0</b></tr> | ||
+ | <tr> | ||
+ | <td>1<td>0<td><b>1</b></tr> | ||
+ | <tr> | ||
+ | <td>0<td>1<td><b>1</b></tr> | ||
+ | <tr> | ||
+ | <td>0<td>0<td><b>0</b></tr> | ||
+ | </table> | ||
+ | * ^(캐럿) : [[C]], [[C++]], [[C#]], [[자바]], [[펄]], [[루비]], [[PHP]], [[파이썬]]과 같은 여러 프로그래밍 언어에서 사용되며, 비트의 XOR 연산자를 나타낸다. 캐럿의 다른 사용과 너무 쉽게 혼동되므로 프로그래밍 컨텍스츠 외부에서 사용되지 않는다. | ||
+ | |||
+ | == 배타적 논리합 게이트 == | ||
+ | 배타적 논리합(XOR)게이트는 참 입력의 개수가 홀수일 때 참(1/high) 출력을 보내는 디지털 논리 게이트이다. 배타적 논리합을 구현하며 게이트의 입력중 하나만이 오직 참이라면 그 결과는 참이 된다. 즉, XOR 게이트에서 입력 값이 A가 Low이고 입력 값이 B가 High이거나 또는 입력 값이 A가 High이고 입력 값이 B가 Low일 때 출력은 High가 되며, A와 B가 모두 High이거나 Low이면 출력은 Low가 된다. XOR 게이트의 기호는 두 가지로 전통적인 기호와 IEEE 기호가 있다. | ||
+ | [[파일:배타적 논리합 게이트.png|썸네일|700픽셀|'''배타적 논리합 게이트''']] | ||
+ | [[파일:XOR 게이트.png|썸네일|200픽셀||'''전통적인 XOR 기호''']] | ||
+ | [[파일:IEEE XOR.png|썸네일|200픽셀|'''IEEE XOR 기호''']] | ||
+ | |||
+ | == 비트간 배타적 논리합 == | ||
+ | 비트간 배타적 논리합은 이진법으로 표현한 수의 각 비트에 대한 2진 집합체 <font>ℤ</font>/<math>[2]</math>에 가감산의 결과를 비트간 배타적 논리합, 배타적 비트화라고 하며 단순하게 배타적 논리합이라고도 한다. 비트간 배타적 논리합은 이진 유한체 <math>GF(2^{n}),n</math> <font>∈</font> <font>ℕ</font>로 가감산이 동일하다. 추가로 <font>ℤ</font>/<math>[2]</math>는 이진 유한체 <math>GF(2)</math>이다. | ||
+ | |||
+ | 0(거짓)과 1(참)에 대한 배타적 논리합과 비트간 배타적 논리합은 같다. 하지만 0과 1이외 다른 형태의 데이터가 있는 환경에서는 다른 형태의 데이터와 백타적 논리합이 되어 결과적으로는 비트간 배타적 논리합과 다른 결과가 나오므로 주의해야 한다. 비트간 배타적 논리합은 비트 연산에서 특정 비트를 반전시키는 데 사용된다. 어느 수에서 반전을 하고 싶은 부분의 비트를 1로 채워진 수와 배타적 논리합을 하면 지정된 부분이 반전된 수를 얻을 수 있다.<br> | ||
+ | <math>0011</math><font>(₂)</font> <font>⊕</font> <math>0110</math><font>(₂)</font> <math>= 0101</math><font>(₂)</font> | ||
+ | 비트간 배타적 논리합으로 다수의 입력에 대한 오류 짝수 홀수 패리티를 계산하여 오류 검출에 사용된다. 이 목적으로 배타적 논리합 게이트를 트리 구조로 접속된 회로를 패리티 트리라고 한다. | ||
+ | === 암호 키 === | ||
+ | 비트칸 배타적 논리합은 특정 비트의 반전이므로, 2회 반복하면 원래대로 된다.<br> | ||
+ | <math>(P</math> <font>⊕</font> <math>K)</math> <font>⊕</font> <math>K = P</math> | ||
+ | 이를 이용하여, <math>K</math>의 키를 사용하여 암호화할 수 있다. <math>P</math>를 암호화하면 <math>P </math><font> ⊕</font> <math>K</math>가 된다. | ||
+ | 위의 예시로 <math>0011</math><font>(₂)</font>는 키 <math>0110</math><font>(₂)</font>를 이용하여 <math>0101</math><font>(₂)</font>로 암호화된다. | ||
+ | <math>0110</math><font>(₂)</font> <font>⊕</font> <math>0110</math><font>(₂)</font> <math>= 0011</math><font>(₂)</font> | ||
+ | 으로 키를 이용하여 암호를 복원할 수 있다. 단지 이것만으로 쉽게 풀려버리기 때문에 실제 암호화에는 다른 여러 가지 연산을 같이 사용한다. | ||
+ | |||
+ | == 참고자료 == | ||
+ | * 〈[https://en.wikipedia.org/wiki/Exclusive_or Exclusive or]〉, 《위키피디아》 | ||
+ | * 〈[https://ko.wikipedia.org/wiki/%EB%B0%B0%ED%83%80%EC%A0%81_%EB%85%BC%EB%A6%AC%ED%95%A9#%ED%8A%B9%EC%A7%95 배타적 논리합]〉, 《위키백과》 | ||
+ | * 〈[https://ko.wikipedia.org/wiki/XOR_%EA%B2%8C%EC%9D%B4%ED%8A%B8 XOR 게이트]〉, 《위키백과》 | ||
+ | * thrillfighter, 〈[https://thrillfighter.tistory.com/287 배타적 OR(XOR), 배타적 NOR(XNOR) 게이트]〉, 2015-07-26 | ||
+ | |||
+ | == 같이 보기== | ||
+ | * [[부정연산]] | ||
+ | * [[논리합]] | ||
+ | * [[논리곱]] | ||
+ | * [[부정논리합]] | ||
+ | * [[부정논리곱]] | ||
+ | |||
+ | {{암호 알고리즘|검토 필요}} |
2019년 10월 24일 (목) 12:12 기준 최신판
배타적 논리합(排他的論理合, XOR, exclusive or)은 수리 논리학에서 주어진 2개의 명제 가운데 1개만 참일 경우 판단하는 논리 연산이며, 약칭으로 XOR, EOR, EXOR이라고 쓴다. exclusive OR, exclusive NOR, 보통 exclusive의 e나 x를 따와서 EOR 또는 XOR로 표기하는데, 보통 XOR로 많이 사용한다. exclusive는 '배타적'이라는 뜻으로, 우리들은 일상속에서 남을 배척하는 것을 보통 배타적이라고 말한다. X, Y가 0또는 1인 값을 가질 때, X와 Y의 배타적 논리합을 X⊕Y로 표현할 수 있다. X와 Y의 값이 같을 때 X⊕Y=0, 값이 다를 때 X⊕Y=1로 출력된다.
연산자는 ⊻, ⩒ 이다. 혼동이 되지 않을 경우 XOR, xor, ⊕, +, ≠라고도 쓴다. 추가로 컴퓨터 프로그래밍 등에서 응용 수학으로 비트간 배타적 논리합(bitwise exclusive or)을 간단히 배타적 논리합, XOR이라고 부르는 경우가 있다. 연산자는 XOR, xor, ⊕, ^ 등을 사용한다.
특징[편집]
배타적 논리합은 논리곱(⋀), 분리(⋁), 부정(¬)을 사용하여
⊻ ⋀ ¬ ⋁ ¬ ⋀
⊻ ⋁ ⋀ ¬ ⋁ ¬
⊻ ⋁ ⋀ ¬ ⋀
라고 표현할 수 있다.
2를 몫으로 하는 잉여류체ℤ/의 가감산(덧셈과 뺄셈이 같다)은 0을 거짓, 1을 참으로 생각하면 배타적 논리합이 된다.
대체 기호[편집]
배타적 분리에 사용되는 기호는 응용 분야마다 다르고 주어진 논의 상황에서 강조되는 속성에 따라 달라진다. 약아 "XOR" 이외에도 표시된다.
- : 더하기 부호는 수학링과 필드의 모든 일반적인 대수적 속성은 추가하지 않고도 사용할 수 있다는 장점이 있지만, 더하기 기호는 또한 일부 표기 시스템에서 포괄적 분리에 사용된다.
- ⊕ : 이 기호는 수학에서 대수적 구조의 직접전인 합으로도 사용된다.
- ⊻, ⩒ : 포괄적인 분리 기호이다.
명제 P | 명제 Q | P ⊻ Q |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
- ^(캐럿) : C, C++, C#, 자바, 펄, 루비, PHP, 파이썬과 같은 여러 프로그래밍 언어에서 사용되며, 비트의 XOR 연산자를 나타낸다. 캐럿의 다른 사용과 너무 쉽게 혼동되므로 프로그래밍 컨텍스츠 외부에서 사용되지 않는다.
배타적 논리합 게이트[편집]
배타적 논리합(XOR)게이트는 참 입력의 개수가 홀수일 때 참(1/high) 출력을 보내는 디지털 논리 게이트이다. 배타적 논리합을 구현하며 게이트의 입력중 하나만이 오직 참이라면 그 결과는 참이 된다. 즉, XOR 게이트에서 입력 값이 A가 Low이고 입력 값이 B가 High이거나 또는 입력 값이 A가 High이고 입력 값이 B가 Low일 때 출력은 High가 되며, A와 B가 모두 High이거나 Low이면 출력은 Low가 된다. XOR 게이트의 기호는 두 가지로 전통적인 기호와 IEEE 기호가 있다.
비트간 배타적 논리합[편집]
비트간 배타적 논리합은 이진법으로 표현한 수의 각 비트에 대한 2진 집합체 ℤ/에 가감산의 결과를 비트간 배타적 논리합, 배타적 비트화라고 하며 단순하게 배타적 논리합이라고도 한다. 비트간 배타적 논리합은 이진 유한체 ∈ ℕ로 가감산이 동일하다. 추가로 ℤ/는 이진 유한체 이다.
0(거짓)과 1(참)에 대한 배타적 논리합과 비트간 배타적 논리합은 같다. 하지만 0과 1이외 다른 형태의 데이터가 있는 환경에서는 다른 형태의 데이터와 백타적 논리합이 되어 결과적으로는 비트간 배타적 논리합과 다른 결과가 나오므로 주의해야 한다. 비트간 배타적 논리합은 비트 연산에서 특정 비트를 반전시키는 데 사용된다. 어느 수에서 반전을 하고 싶은 부분의 비트를 1로 채워진 수와 배타적 논리합을 하면 지정된 부분이 반전된 수를 얻을 수 있다.
(₂) ⊕ (₂) (₂)
비트간 배타적 논리합으로 다수의 입력에 대한 오류 짝수 홀수 패리티를 계산하여 오류 검출에 사용된다. 이 목적으로 배타적 논리합 게이트를 트리 구조로 접속된 회로를 패리티 트리라고 한다.
암호 키[편집]
비트칸 배타적 논리합은 특정 비트의 반전이므로, 2회 반복하면 원래대로 된다.
⊕ ⊕
이를 이용하여, 의 키를 사용하여 암호화할 수 있다. 를 암호화하면 ⊕ 가 된다. 위의 예시로 (₂)는 키 (₂)를 이용하여 (₂)로 암호화된다.
(₂) ⊕ (₂) (₂)
으로 키를 이용하여 암호를 복원할 수 있다. 단지 이것만으로 쉽게 풀려버리기 때문에 실제 암호화에는 다른 여러 가지 연산을 같이 사용한다.
참고자료[편집]
- 〈Exclusive or〉, 《위키피디아》
- 〈배타적 논리합〉, 《위키백과》
- 〈XOR 게이트〉, 《위키백과》
- thrillfighter, 〈배타적 OR(XOR), 배타적 NOR(XNOR) 게이트〉, 2015-07-26
같이 보기[편집]