티스토리 뷰
반응형
이것이 C언어다: Chapter 04~05 정리
Chapter 04. 데이터 표현방식의 이해
04-1. 컴퓨터가 데이터를 표현하는 방식
- 컴퓨터는 0과 1(비트, bit) 만을 이해합니다.
- 8비트 = 1바이트(byte) 가 기본 단위
- 따라서 모든 정수, 문자, 실수는 이진수로 저장됨
예시:
- int a = 5; → 메모리 안에는 00000101(2진수)
- char c = 'A'; → ASCII 코드 65 → 01000001
진수 표현 방법:
int a = 10; // 10진수
int b = 0b1010; // 2진수 (C99 이상)
int c = 012; // 8진수
int d = 0xA; // 16진수
출력 형식 지정자:
printf("%d %o %x\n", 10, 10, 10); // 10 12 a
printf("%X\n", 255); // FF
04-2. 정수와 실수의 표현식
- 정수 표현
- 부호 있는 정수는 2의 보수 방식 사용
- 예: 8비트에서 -5 = 11111011
- 장점: 뺄셈을 덧셈으로 처리 가능, 회로 단순화
- 실수 표현
- IEEE 754 표준 부동소수점
- float: 4바이트(32비트), 약 7자리 유효숫자
- double: 8바이트(64비트), 약 15~16자리 유효숫자
구조: 부호비트(1) + 지수부 + 가수부
작은 팁 ✅
- 실수 연산에서는 오차가 생길 수 있음
- 0.1 + 0.2 == 0.3 은 거짓일 수 있다!
- → 실수 비교는 fabs(a-b) < 1e-9 같은 방법 사용
#include <stdio.h>
#include <math.h>
int main(void) {
double a = 0.1 + 0.2;
if (fabs(a - 0.3) < 1e-9)
printf("거의 같다!\n");
else
printf("다르다!\n");
return 0;
}
04-3. 비트 연산자
정수의 이진 표현을 직접 다루는 연산자:
- & 비트 AND
- | 비트 OR
- ^ 비트 XOR
- ~ 비트 NOT
- << 왼쪽 시프트
- >> 오른쪽 시프트
예시:
int a = 6; // 00000110
int b = 3; // 00000011
printf("%d\n", a & b); // 2 (00000010)
printf("%d\n", a | b); // 7 (00000111)
printf("%d\n", a ^ b); // 5 (00000101)
printf("%d\n", a << 1); // 12 (00001100)
printf("%d\n", a >> 1); // 3 (00000011)
활용:
- 비트 마스크(특정 비트만 켜거나 끄기)
- 속도 빠른 곱셈/나눗셈 (x << 1 ≈ x*2)
- 플래그 관리(옵션 On/Off)
Chapter 05. 상수와 기본 자료형
05-1. C 언어가 제공하는 기본 자료형
- int (정수, 보통 4바이트)
- char (문자, 1바이트)
- float (단정도 실수, 4바이트)
- double (배정도 실수, 8바이트)
- short, long, long long
- unsigned (음수 없이 범위 확장)
크기 확인:
#include <stdio.h>
int main(void) {
printf("int: %zu바이트\n", sizeof(int));
printf("char: %zu바이트\n", sizeof(char));
printf("double: %zu바이트\n", sizeof(double));
return 0;
}
05-2. 문자와 표현방식, 문자열과 자료형
- 문자
- 작은따옴표 'A'
- 실제로는 char 타입 숫자 65 저장
- 문자열
- 큰따옴표 "Hello"
- 내부적으로는 char 배열 + \0 (널 문자)
- "Hello"는 사실 {'H','e','l','l','o','\0'}
예시:
char c = 'A';
char str[] = "Hello";
printf("%c %d\n", c, c); // A 65
printf("%s\n", str); // Hello
05-3. 상수에 대한 이해
상수 종류:
- 리터럴 상수: 10, 3.14, 'A', "Hi"
- 심볼릭 상수: #define PI 3.14
- const 상수: const int MAX = 100;
#define vs const
- #define은 전처리기 치환 (타입 없음)
- const는 타입을 가지며 디버깅에 유리
- 최근 코드에서는 const 선호
#define PI 3.14159
const double pi = 3.14159;
int main(void) {
printf("%f %f\n", PI, pi);
return 0;
}
작은 연습 문제 ✍️
- 정수 1234를 2진수, 8진수, 16진수로 출력해보세요.
- 비트 연산을 이용해 정수의 짝수/홀수 판별 프로그램을 짜 보세요.
- 힌트: n & 1 결과가 0이면 짝수
- 섭씨-화씨 변환을 const 상수를 이용해 짜 보세요.
- 공식: F = C * 9 / 5 + 32
- 문자열 "Hello" 의 길이를 직접 반복문으로 세어 보세요.
핵심 정리 ✅
- 데이터는 모두 이진수로 저장된다
- 정수는 2의 보수, 실수는 IEEE 754 부동소수점
- 비트 연산은 빠르고 메모리 절약적인 저수준 기술
- C의 기본 자료형은 int, char, float, double 중심
- 문자열은 char 배열이며 마지막에 \0 포함
- 상수는 #define보다 const 사용이 현대적이고 안전
반응형
'[문법] C언어' 카테고리의 다른 글
6) C언어 함수 완전정리: 정의, 호출, 변수 범위와 재귀까지 (4) | 2025.08.31 |
---|---|
5) C언어 조건문 완전정리: if / switch / break / continue (0) | 2025.08.31 |
4) C언어 반복문 완전정리: while, do~while, for 한눈에 배우기 (4) | 2025.08.31 |
3) C언어 입출력 완전정복: printf와 scanf 쉽게 배우기 (4) | 2025.08.31 |
1) C언어의 기본: C언어기초, 기본구성, 변수와 연산자 (6) | 2025.08.31 |