C 언어/[책 정리] 혼자 공부하는 C언어

그 외 유용한 연산자 (2)

smile blog 2022. 12. 1. 16:43

조건, 비트 연산자, 연산 우선순위 및 방향


조건 연산자

조건 연산자는 유일한 삼항 연산자로 ? 와 : 기호를 함께 사용한다.

 

  1. a = 10, b = 20을 대입하면 10 > 20은 거짓이다.
  2. 조건 연산자에서 거짓일 때는 세 번째 값(b)을 선정한다.
  3. 선정한 세 번째 값(b)을 res에 대입한다.

 

조건 연산자의 피연산자에 대입식 사용하기

조건 연산자의 피연산자에 대입식을 직접 사용할 수도 있다

바람직한 사용법

(a>b) ? (res1 = a) : (res2 = b);

참일 때와 거짓일 때 그 결과를 반영하는 대상이 다를 때 유용하다.

 

조건 연산자는 코드를 간략히 만들어주는 효과가 있으며 매크로 함수에 사용하면 좋으나 가독성을 떨어뜨릴수도 있으므로 필요한 곳에만 사용하는 것이 중요하다.


비트 연산자

비트 연산자는 데이터를 비트 단위로 연산한다.

 

#include <stdio.h>

int main(void)
{
	int a = 10;
	int b = 12;

	printf("a & b : %d\n", a & b);
	printf("a ^ b : %d\n", a ^ b);
	printf("a | b : %d\n", a | b);
	printf("~a : %d\n", ~a);
	printf("a << 1 : %d\n", a << 1);
	printf("a >> 2 : %d\n", a >> 2);

	return 0;
}

 

- 비트별 논리곱 연산자

printf("a & b : %d\n", a & b);

 

& 연산은 두 비트가 모두 1인 경우에만 1로 계산한다

 

- 비트별 배타적 논리합 연산자

printf("a ^ b : %d\n", a ^ b);

^ 연산은 두 비트가 서로 다른 경우만 1로 계산한다

 

- 비트별 논리합 연산자

printf("a | b : %d\n", a | b);

| 연산은 두 비트 중에서 하나라도 참이면 1로 계산한다

 

 

- 비트별 부정 연산자

printf("~a : %d\n", ~a);

~ 연산은 1은 0으로 바꾸고 0은 1로 바꾼다.

 

- 비트 이동 연산자

printf("a << 1 : %d\n", a << 1);
printf("a >> 2 : %d\n", a >> 2);

 

 

<< 연산자는 왼쪽으로 이동시킨다 ( 00010100 = 20 )

 

 >> 연산자는 오른쪽으로 이동시킨다 ( 00000010 = 2 )


연산자 우선순위와 연산 방향

하나의 수식에서 2개 이상의 연산자가 함께 쓰일 떄는 연산자의 우선순위에 따라 연산된다.

  • 단항 연산자 > 이항 연산자 > 삼항 연산자 ( 3개의 피연산자를 필요로 하는 연산자 )
  • 산술 연산자 > (비트 이동 연산자) > 관계 연산자 > 논리 연산자


삼항 연산자
조건식 ? 반환값1 : 반환값2

=> 물음표(?) 앞의 조건식에 따라 결괏값이 참(true)이면 반환값1을 반환하고, 결괏값이 거짓(false)이면 반환값2를 반환합니다.


기타 연산자 그림