연산자 유형 분류
C 언어에서 사용되는 주요 연산자 카테고리:
- 산술 연산자: +, -, *, /, %
- 비트 이동 연산자: <<, >>
- 비트 연산자: &, |, ^
- 대입 연산자: =, +=, -=, *=, /=, %=, <<=, >>=, &=, |=, ^=
- 단항 연산자: !, ++, --, &, *, +, -, ~, sizeof, (타입)
- 관계 연산자: >, >=, <, <=, ==, !=
- 논리 연산자: &&, ||
- 조건 연산자: ? :
- 쉼표 연산자: ,
- 배열 인덱스: [ ]
- 함수 호출: ( )
- 구조체 접근: . , ->
진법 체계와 변환
진법은 수치 표현 방식으로, 일상에서도 60초(60진법), 12개월(12진법) 등 다양한 예시가 존재합니다.
숫자 12의 각 진법 표현:
- 2진수: 1100
- 8진수: 14
- 10진수: 12
- 16진수: C
2진수를 10진수로 변환
11002 → (1×2³) + (1×2²) + (0×2¹) + (0×2⁰) = 1210
10진수를 2진수로 변환
12510 변환 과정:
125 ÷ 2 = 62 ... 1 (LSB) 62 ÷ 2 = 31 ... 0 31 ÷ 2 = 15 ... 1 15 ÷ 2 = 7 ... 1 7 ÷ 2 = 3 ... 1 3 ÷ 2 = 1 ... 1 1 ÷ 2 = 0 ... 1 (MSB) ∴ 1111101<sub>2</sub>
2진수 → 8진수 변환
011010112 → 3비트 단위 분할: 001 101 011 → 1 5 3 → 01538
2진수 → 16진수 변환
011010112 → 4비트 단위 분할: 0110 1011 → 6 B → 0x6B
원코드, 반코드, 보수
정수 표현 방식:
- 원코드: 부호 비트(0:양수, 1:음수) + 절대값
- 반코드: 원코드에서 부호 비트 제외 비트 반전
- 보수: 반코드 + 1
양수: 세 표현 동일
음수: 각 표현 상이
메모리에는 보수 형식 저장
비트 이동 연산
정수만 연산 가능
좌측 시프트 (<<)
규칙: 왼쪽 초과 비트 삭제, 오른쪽 0 채움
예: 5<<1 → 1012 → 10102 = 10
우측 시프트 (>>)
두 가지 방식:
- 논리 시프트: 왼쪽 0 채움
- 산술 시프트: 왼쪽 부호 비트 채움
비트 단위 연산
정수 대상 연산자:
- & (AND): 비트 모두 1일 때 1
- | (OR): 비트 중 1이 있으면 1
- ^ (XOR): 비트가 다르면 1
- ~ (NOT): 비트 반전
비트 AND 예제
#include<stdio.h>
int main() {
int valA = -2; // 보수: 111...1110
int valB = 5; // 보수: 000...0101
int result = valA & valB; // 000...0100 (4)
printf("%d\n", result);
}
비트 OR 예제
int result = valA | valB; // 111...1111 → -1
비트 XOR 예제
int result = valA ^ valB; // 111...1011 → -5
비트 NOT 예제
int result = ~valA; // 000...0001 → 1
쉼표 표현식
왼쪽에서 오른쪽으로 실행, 마지막 표현식 결과 반환
int x = 1, y = 2; int z = (x > y, x = y + 10, y = x + 1); // z = 13
배열 인덱스 연산자
배열명[인덱스] 형태
int arr[5]; arr[2] = 100; // 배열과 인덱스 2개 피연산자
함수 호출 연산자
함수명(인자) 형태
int calc(int a, int b) { return a + b; }
int sum = calc(3, 4); // calc, 3, 4 피연산자
구조체 접근 연산자
직접 접근 (.)
struct Coord { int x; int y; };
struct Coord pos = {1, 2};
printf("X: %d, Y: %d", pos.x, pos.y);
포인터 접근 (->)
struct Coord *ptr = &pos; ptr->x = 10;
연산자 우선순위와 결합성
- 우선순위: 연산 실행 순서 결정
- 결합성: 동순위 연산 처리 방향
우선순위 예시: * > +
결합성 예시: = 는 우측 결합
표현식 평가
정수 승격
char, short 연산 시 int로 변환 후 처리
- 부호 있음: 부호 비트 확장
- 부호 없음: 0으로 채움
산술 변환
피연산자 타입 불일치 시 상위 타입으로 자동 변환
타입 계층 (낮음 → 높음):
- int
- unsigned int
- long int
- unsigned long int
- float
- double
- long double