연산자와 표현식
연산자(Operator)
- 값 또는 변수에 대한 연산을 수행하는 기호
- 피연산자(operand)와 함께 표현식을 구성한다.
산술 연산자
+
, -
, *
, /
, %
정수와 실수의 연산 차이
int a = 10, b = 3;
printf("%d\n", a / b); // 3
printf("%f\n", 10.0 / 3) // 3.333333
- 피연산자 중 하나라도 실수 타입이면 실수 연산이 수행된다.
%
연산자는 정수 타입에만 사용 가능하다. 실수에 사용하면 컴파일 에러
대입 연산자
=
, +=
, -=
, *=
, /=
, %=
int x = 5;
x += 2; // x = x + 2
증감 연산자
++
, --
전위형과 후위형 차이
int a = 3;
printf("%d\n", ++a) // 4
printf("%d\n", a++) // 4, 출력 후 5로 증가
- 전위형(
++a
): 값을 증감 처리 후에 결과값 반환 - 후위형(
a++
): 결과값 반환 후에 값을 증감 처리
관계 연산자
==
,!=
,<
,>
,<=
,>=
int a = 5, b = 10;
if (a < b) {
printf("a는 b보다 작다");
}
-
실수(
double
,float
) 비교 주의2진수는 실수에 대해 근사 표현하기 때문에 미세한 오차가 발생할 수 있다.
double x = 0.1 + 0.2;
if (x == 0.3) {/* false일 수 있음 */}
논리 연산자
&&
,||
,!
int a = 0, b = 1;
if (a || b) {
printf("true");
}
-
단락 평가(short-circuit)
&&
: 왼쪽이 거짓이면 오른쪽은 평가하지 않음||
: 왼쪽이 참이면 오른쪽은 평가하지 않음
-
&&
가||
보다 우선순위가 높다.int a = 0, b = 1, c = 2;
if (a || b && c) {
// a || (b && c)로 결합됨
// b && c 먼저 평가 -> a와 결과를 || 비교
}
비트 연산자
&
,|
,^
,~
,<<
,>>
- 하드웨어 제어, 플래그 처리
int a = 5; // 0101
int b = 3; // 0011
printf("%d\n", a & b); // 0001 -> 1
&
: 비트 AND|
: 비트 OR^
: 비트 XOR~
: 비트 NOT<<
: 왼쪽 시프트(n비트만큼 이동)>>
: 오른쪽 시프트(n비트만큼 이동)
삼항 연산자
조건 ? 참 : 거짓
int x = 5, y = 10;
int max = (x > y) ? x : y; // max = 10
쉼표 연산자
- 표현식을 순서대로 실행, 마지막 결과값 반환
int a = (1 + 2, 3 + 4); // 7
sizeof 연산자
- 피연산자의 바이트 크기 반환
printf("%d", sizeof(int)); // 4
표현식(Expression)
- 값으로 평가되는 코드 조각
- 연산자와 피연산자로 구성
- 표현식은 값을 만들지만 실행 명령은 아님
3 + 4
a * (b + C)
x = y + 1
문장(Statement)
- 프로그램이 실행하는 최소 단위 명령문
- 표현식 뒤에 세미콜론이 붙으면 하나의 문장이 됨
3 + 4;
x = y + 1;
세미콜론(;) 의미
- 세미콜론(;)은 표현식의 실행이 끝남을 뜻하는 종결 기호이다.
- 세미콜론이 붙어야 실행 문장이 됨
x + y // 표현식, 실행되지 않음
x + y; // 문장, 실행되고 결과는 버려짐
; 하나만 써도 빈 문장(null statement)으로 해석됨