(C++) 3.6 논리 연산자

이준우·2021년 10월 11일
0

처음엔 확실히 논리 연산자에 대해 배우면 어렵긴 할 듯하다. 대학교 1학년 때 C언어를 하면서 논리연산자 들어갈 때 접고 싶은 마음이 굴뚝 같았던 기억이 난다. 하나씩 파헤쳐 보자.

논리연산자

#include <iostream>

int main()
{
	using namespace std;

	bool x = true;
	bool y = false;

	cout << (x && y) << endl;
	cout << (x || y) << endl;

	return 0;

}
output = 0
	 1

혹시나 해서 그런데 &|는 비트 관련 연산자로 헷갈리면 큰일난다. 논리 연산자는 항상 두개씩이다.(번외로 !와 같이 Not 연산자는 하나다.)

#include <iostream>

int main()
{
	using namespace std;

	int x = 1;
	int y = 2;

	if (x == 1 && y++ == 2)
	{
		//do something
	}

	cout << y << endl;

	return 0;

}
output : 3

이 코드 같은 경우에는 당연히 3이 나온다고 생각할 것이다. 근데,

#include <iostream>

int main()
{
	using namespace std;

	int x = 2;
	int y = 2;

	if (x == 1 && y++ == 2)
	{
		//do something
	}

	cout << y << endl;

	return 0;

}
output : 2

???????모지? 모지?뭐지? 내가 바꾼 것은 int x = 2하나 뿐이다. 그런데 왜 이렇게 바뀔까? 왜 y++ == 2를 실행하지 않지? 라고 생각할 수 있다. &&연산자는 앞의 논리 부터 동작시킨다. 만약 이것이 올바르지 않다면 뒤의 논리는 아예 작동조차 시키지 않는다. 따라서 y++이 작동되지 않아 원래 y가 갖고 있는 2가 출력된 것을 알 수 있다.

또 드모르간의 법칙도 있긴 한데

#include <iostream>

int main()
{
	using namespace std;

	bool x = true;
	bool y = false;

	!(x && y);
	!x && !y;

	//!x || !y

	return 0;

}

이 코드는 잘못된 코드이다. !x && !y를 주석으로 된 코드로 바꿔야 둘이 동일한 작동을 한다. 실수 많이 할 수 있으므로 참고하도록 한다. 아님 드모르간의 법칙에 대한 공부를 하고오면 쉽게 이해할 수 있다.

C++에는 XOR 연산자가 없다. 이는 코딩으로 만들어 줘야 한다.

https://ko.wikipedia.org/wiki/C%EC%99%80_C%2B%2B%EC%9D%98_%EC%97%B0%EC%82%B0%EC%9E%90
혹시나 하지만 논리 연산자들도 각각의 우선순위가 있기 때문에, 참고하여 코드를 짜도록 한다. 아니면 괄호를 쳐서 우선순위를 직접 정해주자. 이게 진짜 좋은 방법!!

profile
꿈꾸는 CV

0개의 댓글