본문 바로가기
프로그래밍/C

[c언어] 조건문( if ) / 비교 연산자, 삼항 연산자 / 논리 연산자 / bool 자료형 / 비트 연산자 / 연산자 우선순위 / switch문

by B T Y 2017. 10. 12.
반응형

조건문( if ) / 비교 연산자, 삼항 연산자 / 논리 연산자 / bool 자료형 / 비트 연산자 / 연산자 우선순위 / switch문에 대해서 정리한다.




조건문 ( if )



if ( 조건식 )

  {

      실행코드

  } 

  else if ( 조건식 )

  {

      실행코드

  } 

  else

  {

      실행코드

  }



  - 조건식을 만족했을때 해당 코드를 실행한다.

  - 조건식 뒤에 세미콜론이 붙는다면 중괄호 안의 코드는 실행되지 않고 if문이 끝나게 된다.

    ( 해당 실행코드가 정상적으로 실행되는 이유는 c언어에서는 코드를 중괄호로 묶을수 있기 때문이다 )


  - 실행코드가 한줄이면 중괄호의 생략이 가능하다.

  - 조건식에서 비교할 변수와 값, 변수와 변수는 자료형을 맞춰주어야 한다.

    ( 실수의 경우에는 반올림 오차가 발생할 수 있으므로 반올림 오차를 감안하여 비교한다 )


  - 조건문을 분기하기 위해서는 else if ( 조건식 ) 혹은 else를 이용한다.

    ( 조건문을 여러방향으로 분기하기 위해서는 else if를 사용한다 )


  - 조건식을 여러개 지정하기 위해서는 논리연산자를 사용한다.

  - c언어에서는 0을 거짓으로 사용하고 나머지는 모두 참으로 사용한다.






비교연산자와 삼항 연산자


  - 비교연산자는 값을 비교할때 사용한다.


  - 연산에 필요한 값이 몇개인가에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 구분된다.

   ( 예를 들어서 ++x, -x 같은 경우에 단항 연산자이고 a + b, a += b 같은 경우에는 이항 연산자

     x ? a : b 같은 경우에는 삼항 연산자이다 )

  - 삼항 연산자의 경우에는 변수(혹은 조건식) ? 값1 : 값2; 형식으로 사용한다.

    ( 값1은 참일때 사용, 값2는 거짓일때 사용할 값이다 )


    * 삼항 연산자에서 변수가 아닌 조건식을 사용할 때는 괄호로 묶어줘서 코드의 가독성을 높여주는게 좋다.












논리연산자


  - 조건식이나 값을 논리적으로 판단할때 사용

  - if문에서 주로 많이 사용

  - and 연산자(&&)는 두값 모두 참이여야 되기 때문에 단락 평가(short-circuit evalution)에 의해서 

    첫번째 값으로 결과가 확실할 때 두번째 값은 확인하지 않는 특성이 있다.

  - or 연산자(||)에서도 단락 평가를 하는데 첫번째 값만 참이여도 참이기 때문에 뒤에 값은 확인하지 않는 특성이 있다.












bool 자료형


  - <stdbool.h> 헤더파일을 포함해주면 true를 참으로 false를 거짓으로 나타낼수 있다.

    ( 헤더파일에는 bool, true, false가 정의되어 있다 )

  - 자료형은 bool을 사용

  - 자료형의 크기는 1byte

    ( int를 이용해서 참/거짓을 표현하려면 4byte의 크기를 사용해야 한다 )

  - 결과를 표현할때 서식지정자는 %d를 사용한다.






비트 연산자


  - 비트 단위로 연산할때 사용

  - 비트로 옵션을 설정하는 방식을 플래그라고 한다.

  - 비트를 반전시킬때 NOT 연산자를 사용한다.





  - 쉬프트 연산자를 이용할때 3 << 3은 3 * 2^3와 같고 결과는 24이다.

    그리고 24 >> 2는 24 / 2^2 = 6과 같다.

  - 즉, <<은 2의 거듭제곱을 해당 값에 곱한 값과 같고 >>은 2의 거듭제곱을 나눈 값과 같다.


  - 시프트 연산시에 최상위 비트나 최하위 비트를 넘어서는 비트는 사라진다.


  - 부호 있는 비트의 자료형을 비트연산 할때는 부호 비트를 주의한다.

    ( 오른쪽으로 쉬프트 연산시에는 모자라는 공간은 모두 부호비트로 채운다 )


      * 왼쪽으로 쉬프트 연산시에 처음 값이 양수임에도 불구하고 부호비트 부분을 1로 덮어쓰게 되며 

        양수에서 음수로 값이 변할 수 있다.

        ( 부호 있는 비트에서 왼쪽으로 쉬프트 연산시에는 부호비트 값을 덮어쓰게 된다 )


  - 2진수 비트연산에서 양수를 음수로 바꿀때는 양수의 0과 1을 뒤집은다음에 +1을 해준다.

    ( 예를 들어서 1은 0000 0001인데 -1로 바꾸려면 0과 1을 뒤집어 1111 1110로 만들어준다음에 

      +1을 해주면 1111 1111이 -1이 된다 )


  - 비트 연산자로 플래그를 켜고 끌수 있다.


      * 플래그를 켤때 플래그 |= mask를 이용한다.

      * 플래그를 끌때 플래그 &= ~mask를 이용한다.

      * 비트를 토글할때 플래그 ^= mask를 이용한다.

         ( 토글은 켜져있을때 끄고 꺼져있을때 켜는것을 말한다 )



  - &, |, ^ 연산 결과




  - NOT 연산 결과 표




  - 최상위, 최하위 비트





  - 플래그 연산 방법



















연산자 우선순위


    - 연산자마다 우선순위가 있지만 괄호를 이용해서 우선순위를 명확하게 표현해주는게 좋다.


    




switch문



  switch( 값을 판단할 변수 )

  {

      case 값1:

          실행코드1;

          break;


      case 값2:

          실행코드2;

          break;


      case 값3:

          실행코드3;

          break;


      default:

          실행코드4;

          break;

  }



  - 조건이 많을때 유용하게 쓰인다.

  - 해당 switch문에서 case 조건이 하나도 맞지 않을때는 default문을 실행한다.

    ( default문은 생략 가능하다 )


  - case 뒤에는 무조건 값이 와야한다.

    ( 변수나 조건식은 올수가 없다 )


  - 실행코드 뒤에 break가 없다면 break를 만나기전에 아래 case문에 있는 실행코드를 모두 실행한다.


  - 조건식만 바뀌고 값이 바뀌지 않을때 사용하기에 적합하다.

  - case문 안에 변수를 선언해주려면 중괄호를 이용해서 case를 묶어줘야 한다.

    ( case문 안에 있는 변수는 case문 안에서만 사용이 가능하다 )


  - 판별 가능한 자료형은 정수 자료형뿐이다.

    ( 문자 자료형 char 또한 정수 자료형이기 때문에 사용 가능하다 )







반응형

댓글