<aside> 💡 목차


</aside>

평가(evaluate) ?

<aside> 💡 C#에서 평가(evaluate)는 식의 결과를 계산하는 것을 의미


int x = 1 + 2;

</aside>

논리연산 기본 개요

Untitled

Untitled

&& AND || OR ! NOT 의 관계

<aside> 💡 비트연산자 & 과 | 과 비슷함

Untitled

결과를 반대로 만든다.

결과를 반대로 만든다.

int num = 1;

!(num == 1)! //참 -> 거짓
!(num == 0)! //거짓 -> 참

</aside>

|| OR 의 활용

<aside> 💡 수학 성적이 90점 이상 이거나 영어 성적이80점 미만일때?

→ || 연산자 활용


Untitled

</aside>

>> 식이 성립했을 경우, 평가의 생략

즉, 이미 참이라면 다음 결과를 내는것을 생략한다는 의미.

OR 이든 AND 든, 식의 결과가 거짓이 되는 조건이 된다면, 연산은 종료 (AND는 좌항이 거짓이면 바로 거짓이므로 우항을 생략한다)

→ OR 의 경우

<aside> 💡 좌항에서 이미 참이 나온 경우


이미 첫 번째 표현식이 참이므로 두번째는 평가할 필요 없음

이미 첫 번째 표현식이 참이므로 두번째는 평가할 필요 없음

</aside>

<aside> 💡 좌항에서 거짓이 나온 경우


좌항이 거짓이므로 우항 표현식까지 평가해야함

좌항이 거짓이므로 우항 표현식까지 평가해야함

</aside>

→ AND의 경우

<aside> 💡 좌항에서 거짓이 나온 경우


좌항이 거짓이므로 이미 거짓이니 우항을 생략함

좌항이 거짓이므로 이미 거짓이니 우항을 생략함

</aside>

→ 평가의 생략 예시 문제1 🔥🔥🔥

아래 내용 요약

아래 내용 요약

int num1 = 10;
int num2 = 20;
if (num1 == 10 || ++num2 == 20)
{
    num1++;
}
 
Console.WriteLine($"{num1}, {num2}");

→ 평가의 생략 예시 문제2 🔥🔥🔥

using System;

public class Program
{
    public static void Main()
    {
        int num = 10;

        //평가의 생략 법칙
        //좌항은 거짓이니 우항이 정상 연산됨
        if (3 * 6 != 18 || ++num == 11) 
        {
            num++; //11++ -> 12
        }

        //평가의 생략 법칙
        //좌항은 참이고, 우항은 정상연산됨
        //하지만 우항은 거짓이라, if문 내부의 num은 작동하지 않음
        if (12 + 2 == 14 && num++ == 11) //12-> 13
        {
            num++;
        }

        //평가의 생략 법칙
        //좌항은 참이니 OR에 의해 전체가 참이니 우항은 생략됨
        if (1 * 4 == 4 || num++ > 0)
        {
            num++; //13 -> 14
        }

        Console.WriteLine(num); //14
    }
}

→ 평가의 생략 예시 문제3 🔥🔥🔥

using System;

namespace LogicalExpressions
{
    class Program
    {
        static void Main(string[] args)
        {
            int num1 = 1;
            int num2 = 1;
            int num3 = 4;

            bool bExpression1 = !(num1 == num2 && num1 != num3); // (1*1)' = 0
            bool bExpression2 = num1 != num2 || num1 == num3; // 0 + 0 = 0

            Console.WriteLine($"expression1: {bExpression1}"); //-> 0 False
            Console.WriteLine($"expression2: {bExpression2}"); //-> 0 False

            //0 + 0 + 1
            bool bExpression3 = num1 > num2 || num1 == num3 || ++num1 > num2; //num1 = 2
            Console.WriteLine($"expression3: {bExpression3}"); //-> 1 True

            // 1 + ...평가의 생략
            bool bExpression4 = num3 >= num2 || num1-- == num2;
            Console.WriteLine($"expression4: {bExpression4}"); //-> 1 True

            // 0 * ...평가의 생략
            bool bExpression5 = num3 == num1 && --num2 > num1;
            Console.WriteLine($"expression5: {bExpression5}"); //-> 0 False
        }
    }
}

>> 논리식의 SOP → POS 표현

<aside> 💡 다음 두 식은 표현은 다르지만 같은 결과를 가집니다


Untitled

if(!(a == b || c == d))
if(a != b && c != d)

가만보면 OR → AND 로 변환한 모습을 볼 수 있습니다.

OR → AND? 이는 논리회로설계에서 공부했던

SOP → POS 변환으로 생각할 수 있습니다

또한, 드모르간법칙 을 생각할 수 있습니다

$\overline {AB + CD}$

$\overline {AB} \times \overline {CD}$

$(AB + CD)’$

$AB’ \times CD’$

| --- | --- | --- | --- |

| --- | --- | --- |

</aside>

<aside> 💡 쉽게 이해하는 또 다른 방법

</aside>

→ SOP$_2$POS 예시 문제 🔥🔥🔥

<aside> 💡 다음 코드의 출력은?

</aside>