Search

[C 프로그래밍] 입출력 함수와 연산자 (2)

제목
Tag
작성일

연산자 개념

자료를 대상으로 각종 연산 수행을 지시하는 기호
연산자 종류
구분
연산자
설명
산술 연산자
+, -, *, /, %, ++, --
사칙연산 및 증감 연산
관계 연산자
>, <, >=, <=, ==, !=
대소 및 등가 비교
논리 연산자
&&, `
대입 연산자
=, +=, -=, *=, /=, %=
연산과 대입을 함께 수행
조건 연산자
?:
조건에 따라 값 선택
비트 연산자
&, `
, ^, ~, <<, >>`
기타 연산자
sizeof(), ,, &, *, (type)
주소, 포인터, 형변환 등

산술 연산자

연산자
설명
예시 코드
결과
+, -, *, /
덧셈, 뺄셈, 곱셈, 나눗셈
5 + 3, 3.0 / 2.0, 3 / 2
8, 1.5, 1
%
나머지 계산 (정수형만)
5 % 3, -5 % 3, 5 % -3, -5 % -3
2, -2, 2, -2
++
1 증가
++i, i++
전치: 먼저 증가 / 후치: 나중 증가
--
1 감소
--i, i--
전치: 먼저 감소 / 후치: 나중 감소
증감 연산자 예시 (a=10 일때)
수식
실행 결과(a)
수식의 값
비고
b = ++a;
11
11
전치 증가
b = a++;
11
10
후치 증가
b = --a;
9
9
전치 감소
b = a--;
9
10
후치 감소

관계 연산자

연산자
의미
예시 코드
결과
==
같다
a == b
같으면 1
!=
다르다
a != b
다르면 1
>, <
크다, 작다
a > b, a < b
참이면 1
>=, <=
크거나 같다, 작거나 같다
a >= b, a <= b
참이면 1

논리 연산자

연산자
의미
예시
결과
&&
논리곱 (AND)
(a > 2 && b <= 7)
모두 참이면 1
||
논리합 (OR)
a || b
하나만 참이어도 1
!
부정 (NOT)
!a
a가 0이면 1, 아니면 0
int a = 4, b = 7; printf("%d\n", a > 2 && b <= 7); // 1 printf("%d\n", a < 2 || b <= 7); // 1 printf("%d\n", !a); // 0
C
복사
주의: 논리 연산은 결과가 확정되면 이후 조건은 평가하지 않음 (short-circuit)

조건 연산자 (삼항 연산자)

형식
의미
예시 코드
결과
조건식 ? 참일때 : 거짓일때
조건이 참이면 앞, 거짓이면 뒤 실행
a >= b ? a : b
두 수 중 큰 값 출력
int a = 25, b = 13; printf("최댓값 = %d\n", a >= b ? a : b); // 25
C
복사

대입 연산자

연산자
의미
예시
결과
=
대입
a = b + 10
b+10의 값을 a에 저장
+=
더해서 대입
a += 3
a = a + 3
-=
빼서 대입
a -= 3
a = a - 3
*=
곱해서 대입
a *= 2
a = a * 2
/=
나누어서 대입
a /= 2
a = a / 2
%=
나머지를 대입
a %= 3
a = a % 3

비트 연산자

정수형 값의 비트 단위로 연산을 수행하는 연산자
연산자
의미
예시
결과
&
AND
a & b
둘 다 1이면 1
|
OR
a | b
하나라도 1이면 1
^
XOR
a ^ b
서로 다르면 1
~
NOT
~a
비트를 반전
<<
왼쪽 시프트
a << n
비트를 왼쪽으로 이동 (2ⁿ배 곱)
>>
오른쪽 시프트
a >> n
비트를 오른쪽으로 이동 (2ⁿ 나눗셈)

비트연산 활용

mask 사용
x & mask - mask의 비트가 0인 부분만 0으로 지워짐
mask : 000001111 x : 101100111 결과 : 000000111
C
복사
x | mask - mask의 1인 비트만 강제로 1로 설정
mask : 000001111 x : 101100111 결과 : 10111111
C
복사
x ^ mask - mask가 1인 위치만 01로 반전
mask : 00001111 x : 10110011 결과 : 10111100
C
복사
시프트 연산
2ⁿ 곱하기 - 왼쪽으로 n 비트 이동
x: 0000 0000 0000 0000 0000 0000 0010 1000
y: 0000 0000 0000 0000 0000 0001 0100 0000
왼쪽으로 너무 많이 이동하면 오버플로우 발생
예: 32비트 int는 약 ±21억까지 표현 가능하므로 그 이상 밀면 잘림 발생
int x = 40; int y = x << 3; // y = x * 8
C
복사
2ⁿ 나누기 — 오른쪽으로 n 비트 이동
x: 0000 0000 0000 0000 0000 0000 0010 1000
y: 0000 0000 0000 0000 0000 0000 0000 1010
음수의 경우 부호 비트 유지(맨앞 비트)
int x = 40; int y = x >> 2; // y = x / 4
C
복사

기타 연산자

연산자
의미
사용 예시
결과
sizeof()
자료형 크기(byte)
sizeof(int)
4
,
두 식을 하나로 묶음
(a = 1, b = 2)
마지막 식의 값
&
주소 연산자
&a
a의 주소
*
포인터가 가리키는 값
*p
p가 가리키는 변수 값
(type)
형변환
(double)a / b
double형 나눗셈 수행

연산자의 우선순위와 결합방향