C언어 2진수, 8진수, 10진수, 16진수 이해와 변환 방법

Yuno·2025년 4월 4일
0

1️⃣ 왜 다양한 진법을 사용해야 할까?

컴퓨터는 본질적으로 2진수를 사용. 예를 들어, 10110101 같은 숫자는 컴퓨터는 이해하기 쉽지만, 사람이 보기에는 매우 어려움.

  • 2진수(binary) : 컴퓨터가 사용하는 숫자 체계 (0, 1)
  • 8진수(octal) : 2진수를 3자리씩 묶어서 나타낸 수 (예: 101 011 → 53)
  • 10진수(decimal) : 사람이 일상적으로 사용하는 숫자 체계 (예: 0~9)
  • 16진수(hexadecimal) : 2진수를 4자리씩 묶어서 나타낸 수 (예: 1011 0101 → B5)

2️⃣ 진법 변환 방법 정리

✨ 정수 부분 10진수 → 2진수 변환 방법

  • 나누기 2를 반복해서 나머지를 역순으로 기록
  • 21을 2진수로 바꾸면?
21 ÷ 2 = 10 (나머지 1)
10 ÷ 2 = 5 (나머지 0)
5 ÷ 2 = 2 (나머지 1)
2 ÷ 2 = 1 (나머지 0)
1 ÷ 2 = 0 (나머지 1) → 끝!

→ 나머지를 역순으로 기록하면: 10101

✨ 소수 부분 10진수 → 2진수 변환 방법

  • 소수는 반대로 곱하기 2를 반복하여 정수 부분을 차례로 기록
  • 0.6을 2진수로 바꾸면?
0.6 x 2 =1.2 → 정수부분: 1
0.2 x 2 = 0.4 → 정수부분: 0
0.4 x 2 = 0.8 → 정수부분: 0
0.8 x 2 = 1.6 → 정수부분: 1
(계속 반복)

→ 결과: 1001 반복

결국, 21.6 은 2진수로 10101.1001...(반복) 이 됨


3️⃣ 8진수 & 16진수로 변환하기

✨ 2진수 ↔ 8진수

  • 3자리씩 묶기
  • 2진수 010011100 → 010 011 100 → 2 3 4

✨ 2진수 ↔ 16진수

  • 4자리씩 묶기
  • 10110101 → 1011 0101 → B 5

✨ 10진수 → 8진수 / 16진수 (C 언어에서 출력법)

#include <cstdio>

int main() {

  // 10진수 156을 8진수로 출력
  printf("%o", 156); // 234

  // 10진수 156을 16진수로 출력
  printf("%X", 156); // 9C (대문자)
  printf("%x", 156); // 9c (소문자)
}
  • 주의할점 : 8진수 출력 형식은 %o (소문자 o) 만 사용 가능

4️⃣ 산술 연산자

연산자의미예시
+더하기3 + 2 → 5
-빼기3 - 2 → 1
*곱하기3 * 2 → 6
/나누기3 / 2 → 1 (정수 나눗셈)
%나머지 연산3 % 2 → 1

✨ 복합 대입 연산자 (간편 표현법)

  • a = a + b

    a += b
    로 표현 가능
    (-=, *=, /=, %= 모두 동일한 원리)

✨ 증감 연산자 ++

  • ++a : 먼저 증가시키고 사용
  • a++ : 사용하고 나서 증가
#include <cstdio>

int main() {

  int a = 5;

  printf("%d", ++a); // 출력 : 6 (먼저 증가)
  printf("%d", a++); // 출력 : 6 (출력 후 증가)
  printf("%d", a); // 출력 : 7
}

5️⃣ 데이터 표현 방식 : 실수 vs 정수

  • 정수 : 정확한 숫자 표현 (1, 256, ...)
  • 실수 : 부동소수점 방식 (오차 존재 가능성 있음)
profile
Hello World

0개의 댓글