// short circuit evaluation - > y ์ ๊ฐ์ด 3์ด ๋์ค๋ ์ด์ ?
int x = 1;
int y = 2;
if (x == 1 && y++ == 2)
{
// do something
}
cout << y << endl;โ
#include <iostream>
int main()
{
using namespace std;
bool x = true;
bool y = false;
// logical NOT
cout << !x << endl;
// logical AND
cout << (x && y) << endl;
//logical OR
cout << (x || y) << endl;
//XOR ๋ช
์ ์ค ํ๋๋ง ์ฐธ์ผ ๊ฒฝ์ฐ ์ฐธ์ return
// false false false
// false true true
// true false true
// true true false
if (x != y) // C++์๋ XOR์ ๋ฐ๋ก ๋ํ๋ด๋ ์ฐ์ฐ์๊ฐ ์์ผ๋ฏ๋ก ์ด๋ ๊ฒ ํํ
{
// do something
}
๋ ผ๋ฆฌ์ฐ์ฐ์์๋ AND, OR, XOR์ด ์๋ค.
โ
AND๋ &&์ผ๋ก ํ์๋๊ณ ์ผ์ชฝ ์ค๋ฅธ์ชฝ ๋ operand๊ฐ ์ ๋ถ True ์ผ๋๋ง True๋ฅผ returnํ๊ณ
false๊ฐ ์ ์ด๋ ํ๋ ์ด์ ์๋ค๋ฉด False๋ฅผ return ํ๋ค.
โ
OR ์ ||์ผ๋ก ํ์๋๊ณ operand ์ค ํ๋๋ผ๋ true๊ฐ ์์ผ๋ฉด True๋ฅผ return, ํ๋๋ผ๋ false๊ฐ ์๋ค๋ฉด false๋ฅผ return ํ๋ค.
โ
XOR์ ๋ ๋ช ์ ์ค ํ๋๋ง ์ฐธ์ผ ๊ฒฝ์ฐ์ True๋ฅผ return ํ๊ณ ๋ ๋ค false๊ฑฐ๋ true๋ผ๋ฉด False๋ฅผ returnํ๋ค.
// De Morgan's Law
!(x && y);
!x || !y;
๋ ผ๋ฆฌ์ฐ์ฐ์์๋ ์ํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋๋ชจ๋ฅด๊ฐ ๋ฒ์น์ด ์ ์ฉ๋๋ค.
๋๋ชจ๋ฅด๊ฐ ๋ฒ์น์ด๋ ๋ ผ๋ฆฌ๊ณฑ์ ๋ถ์ ์ ๊ฐ๊ฐ ๋ถ์ ์ ๋ ผ๋ฆฌํฉ๊ณผ ๊ฐ๋ค๋ ๋ป์ด๋ค.
๋ ํ์ด์ ์ค๋ช ํ๋ฉด, not์ ๋ถ๋ฐฐ๋ ๋ ์ ๋ถ ๋ฐ๋๋ก ๋ฐ๊พผ๋ค. (AND -> OR๋ก, OR -> AND๋ก, ์งํฉ์ ์ฌ์งํฉ์ผ๋ก)
< EX_1) ๋
ผ๋ฆฌ์ฐ์ฐ์์ ํน์ง 1>
bool v1 = true;
bool v2 = false;
bool v3 = false;
bool r1 = v1 || v2 && v3;
bool r2 = (v1 || v2) && v3;
bool r3 = v1 || (v2 && v3);
cout << r1 << endl;
cout << r2 << endl;
// &&๊ฐ ||๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.
๋ ผ๋ฆฌ์ฐ์ฐ์์์ &&(AND)๊ฐ ||(OR) ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค. ํท๊ฐ๋ฆฌ๋ฉด ๊ทธ๋ฅ ๋ฏธ๋ฆฌ ๊ดํธ๋ฅผ ์ณ๋์.
์ฌ๊ธฐ์ r1์ด ์๋ฏธํ๋ ๋ฐ๋ r3์ ๊ฐ๋ค.
<EX_2) ๋
ผ๋ฆฌ์ฐ์ฐ์์ ํน์ง 2>
// short circuit evaluation - > y ์ ๊ฐ์ด 2๊ฐ ๋์ค๋ ์ด์ ?
int x = 2;
int y = 2;
if (x == 1 && y++ == 2)
{
// do something
}
cout << y << endl;
์ถ๋ ฅ: 2
// short circuit evaluation - > y ์ ๊ฐ์ด 3์ด ๋์ค๋ ์ด์ ?
int x = 1;
int y = 2;
if (x == 1 && y++ == 2)
{
// do something
}
cout << y << endl;
์ถ๋ ฅ: 3
์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
&& ์ฐ์ฐ์๋ ์ผ์ชฝ์์ ๋ถํฐ ํ์ธํ๋ค. ์ฒซ๋ฒ์งธ ์์ ์์ ์ด๋ฏธ x ==1์ด ์๋๋ฏ๋ก ๋ค์ ๊ตฌ๋ฌธ์ ๋ณด์ง ์๊ณ ๋ฐ๋ก ๋ค์ ๊ตฌ๋ฌธ์ผ๋ก ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์
๋ค์ ๊ณ์ฐ์ธ y++์ ํ์ธํ์ง ์๊ณ ๋์ด๊ฐ๋ค. ๋ฐ๋ผ์ ์ฒซ๋ฒ์งธ ์์ ์์๋ y ์ถ๋ ฅ์ ๊ทธ๋๋ก 2์ด๊ณ , ๋๋ฒ์งธ ์์ ์์๋ ์์ x๊ฐ true๋ฅผ ๋ง์กฑํ๋ฏ๋ก ๋ค์ yํญ๋ ๋ณด๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅ ๊ฐ์ด 3์ด ๋๋ค.
(** y ++์ ํด๋น ๋ฌธ์ฅ์ ์ํํ ํ +1์ ์ฒ๋ฆฌํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค. //// ++y๋ ๋จผ์ +1ํ ๋ค์ ++y๊ฐ ๋ค์ด์๋ ํด๋น ๋ฌธ์ฅ์ ์ฒ๋ฆฌํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.)
โ
<EX_3)>
bool x = 5;
bool y = 7;
if (x != y) // if (!x == y)๋ ํ๋ฆฐ ํํ ! Why?
{
cout << :"x does not equal y" << endl;
}
else
cout << "x equals y" << endl;
if (!x == y)๊ฐ ํ๋ฆฐ ํํ์ธ ์ด์ ๋ !๊ฐ ์ฐ์ ์์๊ฐ ๋์์ ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ํด๋น ํํ์ ์ฌ์ฉํด if๋ฌธ์ ์คํํ์ ๋,
!5๋ false๊ฐ ๋๋ฏ๋ก (0์ด ์๋ ๋ชจ๋ ์ซ์๋ true๋ก ๊ฐ์ฃผ๋๋ค.) if ( false = true ) ๋ก ๊ฐ์ฃผ๋๋ค. ๋ฐ๋ผ์ 5์ 7์ ๋ค๋ฆ์๋ else๋ฌธ์ด ์คํ๋์ด ๋์ ๊ฐ๋ค๊ณ ๋์จ๋ค.
๋ฐ๋ฉด if(x !=y)๋ ์ ํํ๊ฒ 5์ 7์ด ๊ฐ์ง ์๋ค๊ณ ๋์จ๋ค.