공부/C#

[C#] 연산자의 종류(증감, 관계, 논리, 비트)와 if, else if, else절

굴러다니다니 2023. 3. 14. 21:46
728x90

증감 연산자 

++: 증가 연산자로 1씩 증가한다. (num++은 num = num+1과 같다)

--  : 감소 연산자로 1씩 감소한다. (num--은 num = num-1과 같다)

 

증감연산자가 변수의 앞에 쓰이냐 뒤에 쓰이냐에 따라 계산값이 달라진다.

변수의 앞에 쓰인다: 전위연산 (++num) => 연산한 후 출력된다.

변수의 뒤에 쓰인다: 후위연산 (num++) => 출력된 후 연산한다.

 

전위연산 예시

int num1 = 10;
Console.WriteLine(++num1); 
Console.WriteLine(--num1);

위와 같이 실행할 시

10에 1을 더한 후 출력되어 11,

11에 1을 뺀 후 출력되어 10이 출력된다.

후위연산 예시

int num2 = 11;
Console.WriteLine(num2++); 
Console.WriteLine(num2--); 
Console.WriteLine(num2);

위와 같이 실행할 시

11을 출력한 다음 ++로 인해 num2가 12가 되었고,

12를 출력한 다음 --로 인해 num2가 11이 된다.

마지막줄에서 11을 실행해 결과가 11 12 11이 나온다.


관계 연산자

 두 피연산자 사이의 관계를 확인하는 연산자 (대소와 동등의 관계 비교)
 조건문 활용에 빈번하게 쓰인다.
            a < b  : a가 b보다 작은지
            a > b  : a가 b보다 큰지
            a <= b : a가 b보다 작거나 같은지
            a >= b : a가 b보다 크거나 같은지
            a == b : a와 b가 같은지
            a != b : a와 b가 다른지

검사해 조건을 만족하면 true를, 만족하지 않으면 false를 반환한다.

 

관계 연산자 예시

int num3 = 10;
int num4 = 20;
bool result = (num3 < num4);
bool result1 = (num3 > num4);
bool result2 = (num3 <= num4);
bool result3 = (num3 >= num4);
bool result4 = (num3 == num4);
bool result5 = (num3 != num4);
Console.WriteLine("result의 결과 : {0}", result);  
Console.WriteLine("result1의 결과 : {0}", result1);
Console.WriteLine("result2의 결과 : {0}", result2);
Console.WriteLine("result3의 결과 : {0}", result3);
Console.WriteLine("result4의 결과 : {0}", result4);
Console.WriteLine("result5의 결과 : {0}", result5);

위의 코드를 실행하면

  result의 결과 : true

  result1의 결과 : false

  result2의 결과 : true

  result3의 결과 : false

  result4의 결과 : false

  result5의 결과 : true

라는 결과를 얻을 수 있다.


논리 연산자

       참과 거짓으로 이루어지는 진리값이 피연산자인 연산을 말한다.
       비교한 결과는 true와 false로 나온다.
            &&  (AND): a && b, a과 b가 둘다 true면 true를 반환한다.       

a b a && b
0 0 0
0 1 0
1 0 0
1 1 1

            ||  (OR) : a || b, a와 b중 하나라도 true라면 true를 반환한다. 

a b a || b
0 0 0
0 1 1
1 0 1
1 1 1

            !   (NOT): !a, a가 참이면 거짓, a가 거짓이면 참, 반대의 값을 반환한다.

a !a
0 1
1 0

 

논리 연산자 예시

int num5 = 10;
int num6 = 20;
bool res = (num5 == 9 && num6 == 20); 
bool res1 = (num5 <= 10 || num6 < 20);
bool res2 = !res; 
Console.WriteLine("res의 결과 : {0}", res);
Console.WriteLine("res1의 결과 : {0}", res1);
Console.WriteLine("res2의 결과 : {0}", res2);

위의 코드를 실행한다면

res의 결과 : false   (false && true의 결과는 false이다)

res1의 결과 : true  (true || false의 결과는 true이다)

res2의 결과 : true  (false의 !는 true이다)

가 반환된다.


비트 연산자

            << 왼쪽 쉬프트 연산자: 비트를 오른쪽에서 왼쪽으로 밀기
            >> 오른쪽 쉬프트 연산자: 비트를 왼쪽에서 오른쪽으로 밀기
            &  논리곱 연산자: 비트 논리곱 (and)
            |  논리합 연산자: 비트 논리합 (or)
             두개의 비트가 서로 다른 경우에만 1 반환 (XOR)
            ~  비트 반전

 

쉬프트 연산자 예시

int shiftNum = 15;           //0000 1111
int sResult = shiftNum << 1; //0001 1110 => 30
int sResult1 = shiftNum << 2;//0011 1100 => 60
int sResult2 = shiftNum << 3;//0111 1000 => 120
Console.WriteLine(sResult);
Console.WriteLine(sResult1);
Console.WriteLine(sResult2);

차근차근 풀어보자

15를 이진수로 나타낸다면 0000 1111이 될 것이며, 이를 왼쪽으로 한 칸 민다면 0001 1110이 될 것이다.

위와 같은 과정으로 진행한다면 결과는

30

60

90

이 나오며 비트연산자로 왼쪽 한 칸을 밀면 해당 정수값의 두 배가 된다는 결론이 나온다.

이는 반대로 오른쪽으로 한 칸을 밀면 해당 정수값의 절반이 된다.           
 *상황에 따라 곱셈, 나눗셈을 비트의 이동으로 대체할 수 있다.


if절 조건문

  코드의 흐름을 제어하는 구문
  특정 조건에 의해 선택적 실행이 가능
  ㄴ if의 동작 조건이 참일 경우에만 다음 코드 블럭의 내용을 실행시킨다.

            if (조건)  //조건이 참이면
            { //여기부터
                Console.WriteLine("참이면 실행");
            } //여기사이의 코드 블럭 실행

       * 다음과 같은 if문이 있다면?

int num1 = 10;
if (num1 >= 10)
{
	Console.WriteLine("첫번째 if문");
}
if (num1 == 10)
{
	Console.WriteLine("두번째 if문");
}
if (num1 <= 10)
{
	Console.WriteLine("세번째 if문");
}

3개의 개별 if문의 조건을 모두 만족해 세 줄의 출력 문장이 나오며,

첫번째 if문을 만족하더라도 끝나는 것이 아닌 그 아래에 존재하는 if문들을 모두 검사하는 사실을 살펴볼 수 있다.

 

추가로 if의 조건이 아니면 else를 실행한다.

int number = 5;
if (number > 6)
{
	Console.WriteLine("6보다 큼");
}
else //위의 if문이 거짓일 경우 여기 실행
{
	Console.WriteLine("6보다 작음");
}

 

if - else문 예시

int input;
input = int.Parse(Console.ReadLine());
if ((input % 2) == 0)
{
	Console.WriteLine("짝수");
}
else 
{
	Console.WriteLine("홀수");
}

if 하나당 else도 하나만 올 수 있음, 위의 코드는 입력받은 정수가 짝수인지 홀수인지 판별하는 코드이다.

if에 해당되지 않지만 다시 조건을 걸고 싶은 경우 else if를 사용한다.

else if (조건)을 하면 if 조건은 불만족했지만 else if 조건에 만족하는 경우를 의미하며

else if의 개수 제한은 없다.

 

if - else if 예시

int playerHp = 10;
if (playerHp >= 0)
{
	Console.WriteLine("만족한다면 첫번째 if문 실행");
}
else if (playerHp == 10) //아래 else if가 만족해도 위의 if문이 참이라 else if, else는 다 검사안함
{
	Console.WriteLine("만족한다면 두번째 if문 실행");
}
else if (playerHp <= 10)
{
	Console.WriteLine("만족한다면 세번째 if문 실행");
}

위의 코드의 결과는

만족한다면 첫번째 if문 실행

이다. if의 조건을 만족시켰으므로 아래 else if문들은 검사도 하지않고 넘기게 된다.\

 

if - else if - else문 예시

int playerMp = 10;
if (playerMp <= 0)
{
	Console.WriteLine("첫번째 if문");
}
else if (playerMp >= 1)
{
	Console.WriteLine("두번째 if문");
}
else if (playerMp >= 2)
{
	Console.WriteLine("세번째 if문"); 
}
else
{
	Console.WriteLine("위 조건을 모두 만족하지 않음");
}

그렇게 하면 위와같은 코드도 짤 수 있으며, if문을 만족하지 못했지만 else if문을 만족해 두번째 if문을 반환시키는 식이 된다.

 

728x90