일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- VS ERROR
- Desktop
- c++
- 연산자
- Visual Studio
- 리뷰
- 배열
- c
- tipssoft
- 문법
- 지식나눔강좌
- 프로그래밍
- doit코틀린프로그래밍
- CS
- 티스토리
- Tips강좌
- Programming
- 이지스퍼블리싱
- Javascript
- Kotlin
- Tips프로그래밍강좌
- 김성엽
- c#
- 포인터
- 알고리즘
- Win32
- Direct2D
- Windows
- 백준
- 함수
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
XOR: 배타적 논리합 본문

일전에 비트 연산자에 대해 다룬 글이 몇 개 있습니다.
비트 연산자를 다룬 글
비트 연산자 : 메모리 크기 줄이기
최근 비트 연산자에 대한 질문을 들어온지라, 오늘은 비트 연산자에 대해 알아봅니다. 더보기 # 들어가기에 앞서.. 비트 연산자는 프로그래밍에 있어 고급 기술이라 분류할 수 있을 것 같습니다. 따라서 이해도..
pang2h.tistory.com
비트 연산자 : 함수에 인자 넘기기
비트 연산자 : 메모리 크기 줄이기 최근 비트 연산자에 대한 질문을 들어온지라, 오늘은 비트 연산자에 대해 알아봅니다. 더보기 # 들어가기에 앞서.. 비트 연산자는 프로그래밍에 있어 고급 기술이라 분류할 수..
pang2h.tistory.com
이 글들에선 비트합과 비트곱에 대한 내용이 주를 이루었습니다. 그러나 배타적 비트합(XOR)의 경우에는 잘 다뤄지지 않았던 것 같아 이번에 XOR을 소개하고자 이 글을 펼칩니다.
# 비트 연산자를 사전에 알고 있어야 합니다.
# 배타적 비트합(^)에 대한 설명을 찾고 있나요?
Index
- 배타적 논리합
- 의미
- 논리합
배타적 논리합copy^
의미copy^
'배타적'이란 의미를 알아본다면


남을 배척한다는 의미를 가지는데 논리합에 이 의미를 붙여본다면, 둘 중 하나만 참일 때 참을 반환한다는 것이라 생각할 수 있습니다. 둘이 참인 경우에도 참인데 다른 하나가 참이 아니어야 참으로 하겠다는 의미가 배타[1]로 볼 수 있으니까요.
논리합copy^
C언어를 비롯한 많은 언어에서 배타적 비트합 연산자는 제공하더라도, 배타적 논리합 연산자는 제공하지 않습니다. 둘 중 하나인 경우에만 참인 경우가 필요하지 않기 때문입니다.
예를 들어, 집에서 마트에 간다고 해보겠습니다. 가는 길이 멀기 때문에 어떤 교통수단을 이용할 겁니다.
택시 | 자가용 | 지하철 | 버스 |
이 교통수단 중, 하나를 선택하면 다른 세 개의 수단은 자동으로 배제됩니다. 몸은 하난데 여러 수단을 동시에 사용할 수는 없으니까요. 즉, 논리에서 이미 다른 선택지를 배제할 수 있습니다.
그래도 필요할 수도 있겠죠. 그런 경우를 대비해 논리합 연산자를 만들 수도 있을 것입니다. 물론, 직접 연산자를 만들 수는 없으니[2] 같은 기능을 하는 함수를 만들어 보겠습니다.
int LogicalXor(int value1, int value2){
value1 = !(value1);
value2 = !(value2);
return value1 ^ value2;
}
배타적 논리합[3]의 경우 양쪽의 피연산자가 참인지 거짓인지는 크게 중요하지 않습니다. 가장 중요한 것은 양쪽 피연산자끼리의 관계입니다. 분명 위에서 배타적 논리합은 두 값 중 하나만 참인 경우를 찾으면 됩니다.
- 인자로 들어오는 value1 변수의 값과 value2 변수의 값이 서로 다르면 참이기 때문에, 먼저 각 변수의 값을 비트 하나로 표현할 수 있도록 논리 부정 연산자(!)를 이용해 1과 0으로 만들어줍니다.
- 비트 하나에 값이 표현되어 있으므로 배타적 비트합 연산자(^)로 연산한 결과를 반환하면 인자로 들어온 두 값 중 하나가 참일 때만 참을 반환합니다.


확인 결과 정상 동작함을 알 수 있습니다.
'DEV > C C++' 카테고리의 다른 글
C: 숫자 지그재그로 출력하기 (0) | 2020.07.24 |
---|---|
프로그램에 일상을 더하다: 여러 항목 정렬하기 (0) | 2020.03.19 |
부동소수점 (2) | 2020.02.22 |
포인터(pointer) part4. 함수 포인터 배열 (0) | 2020.01.30 |
포인터(pointer) part3. 함수 포인터 (0) | 2020.01.30 |