옴클
학습문제집문제제출이력게시판그룹휴식리더보드

© 2026 옴클. All rights reserved.

이용약관개인정보처리방침

    C언어 문법

    문제집 360문제
    1. 1진법
    2. 2출력문8문제
    3. 3입력문13문제
    4. 변수와 자료형
    5. 연산자
    6. 조건문
    7. 반복문
    8. 중첩 반복
    9. 배열
    10. 문자열
    11. 2차원 배열
    12. 함수
    13. 포인터
    14. 구조체
    15. 매크로
    16. 메모리 동적할당

    직접 해보세요

    c
    1. 학습
    2. /
    3. C언어 문법
    4. /
    5. 진법

    진법

    레슨 1 · C언어 문법

    진법이란? - 숫자를 세는 방법

    우리는 평소에 숫자를 셀 때 0, 1, 2, 3, ..., 9까지 10개의 숫자를 사용해요. 9 다음에 셀 숫자가 없으면 앞자리를 하나 늘려서 "10"이라고 쓰지요. 이렇게 10개의 숫자(0~9)를 사용하고, 다 쓰면 자리를 올리는 방법을 **10진법(decimal)**이라고 해요.

    그런데 컴퓨터 내부의 전자회로는 전기가 흐르는지(1) 안 흐르는지(0), 두 가지 상태만 구별할 수 있어요. 그래서 컴퓨터는 0과 1, 단 두 개의 숫자만 사용하는 **2진법(binary)**으로 모든 정보를 저장해요.

    사실 "진법"은 10진법, 2진법만 있는 게 아니에요. N개의 숫자를 사용하고, N이 되면 자리를 올리는 규칙이면 무엇이든 N진법이 될 수 있어요. 3진법(0,1,2 사용), 4진법(0,1,2,3 사용), 5진법처럼 원하는 만큼 만들 수 있어요. 그중에서 컴퓨터와 친한 2진법, 8진법, 16진법을 자세히 알아볼게요.

    10진법: 0~9 (우리가 평소에 쓰는 방법)

    0부터 1씩 늘려가며 적어보면:

    text
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ...
    

    9 다음에는 쓸 숫자가 없어서, 1의 자리를 0으로 되돌리고 10의 자리를 1 올려요.

    2진법: 0~1 (컴퓨터가 쓰는 방법)

    사용할 수 있는 숫자는 딱 2개, 0과 1뿐이에요. 직접 1씩 늘려가며 적어볼까요?

    text
    0
    1
    10   <- 1 다음에 쓸 숫자가 없어서 자리올림! (1의 자리 0, 2의 자리 1)
    11
    100  <- 11 다음, 1의 자리도 2의 자리도 다 차서 두 번 자리올림!
    101
    110
    111
    1000
    

    10진수와 2진수를 나란히 표로 보면:

    10진수2진수
    00
    11
    210
    311
    4100
    5101
    6110
    7111
    81000
    91001
    101010

    ✏️ 직접 해보기: 11, 12, 13을 2진수로 쓰면 어떻게 될까요? 정답: 1011, 1100, 1101

    8진법: 0~7

    사용할 수 있는 숫자는 0~7, 8개예요. 7 다음에는 자리올림!

    text
    0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 20, ...
    

    7 다음에 쓸 숫자가 없어서 "10"(8진수로 8을 의미)이 돼요.

    16진법: 09, AF

    16개의 숫자가 필요한데 숫자는 10개(0~9)뿐이라, 부족한 6개는 알파벳 A, B, C, D, E, F로 10, 11, 12, 13, 14, 15를 표현해요.

    text
    0, 1, 2, ..., 9, A, B, C, D, E, F, 10, 11, ...
    
    10진수16진수
    99
    10A
    11B
    12C
    13D
    14E
    15F
    1610

    F(15) 다음에는 "10"(16진수로 16을 의미)이 돼요.

    N진법: 규칙 정리하기

    지금까지 본 규칙을 정리하면:

    N진법은 0부터 (N-1)까지, 총 N개의 숫자(또는 기호)를 사용하고, N개를 다 쓰면 자리를 올리는 방법이에요.

    진법사용하는 숫자자리올림 시점
    2진법0, 12가 되면
    3진법0, 1, 23이 되면
    4진법0, 1, 2, 34가 되면
    8진법0~78이 되면
    10진법0~910이 되면
    16진법09, AF16이 되면

    ✏️ 직접 해보기: 3진법으로 0부터 10까지 세어보세요. 정답: 0, 1, 2, 10, 11, 12, 20, 21, 22, 100, 101


    진법 변환하기

    같은 수를 여러 진법으로 표현할 수 있어요. 서로 변환하는 방법을 알아볼게요.

    ① N진수 → 10진수: 자릿값을 곱해서 더하기

    10진법에서 "123"은 1×100 + 2×10 + 3×1 이에요. 즉 각 자리마다 **자릿값(10의 거듭제곱)**을 곱해서 더한 값이지요.

    N진법도 똑같아요. 자릿값으로 **N의 거듭제곱(N⁰, N¹, N², ...)**을 사용해요.

    예제 1) 2진수 1011 → 10진수

    text
    1×2³ + 0×2² + 1×2¹ + 1×2⁰
    = 1×8 + 0×4 + 1×2 + 1×1
    = 8 + 0 + 2 + 1 = 11
    

    예제 2) 8진수 17 → 10진수

    text
    1×8¹ + 7×8⁰ = 8 + 7 = 15
    

    예제 3) 16진수 2F → 10진수

    text
    2×16¹ + 15×16⁰ = 32 + 15 = 47   (F는 15를 의미해요!)
    

    ② 10진수 → N진수: N으로 나누고, 나머지를 거꾸로

    10진수를 N으로 계속 나누면서 나머지를 적고, 마지막에 나머지를 거꾸로 읽으면 N진수가 돼요.

    예제 1) 13을 2진수로

    text
    13 ÷ 2 = 6 ... 나머지 1
     6 ÷ 2 = 3 ... 나머지 0
     3 ÷ 2 = 1 ... 나머지 1
     1 ÷ 2 = 0 ... 나머지 1
    

    나머지를 아래에서 위로 읽으면 → 1101

    예제 2) 100을 16진수로

    text
    100 ÷ 16 = 6 ... 나머지 4
      6 ÷ 16 = 0 ... 나머지 6
    

    나머지를 아래에서 위로 읽으면 → 64 (16진수 64는 10진수 100과 같아요!)

    ✏️ 직접 해보기: 25를 2진수로 바꿔보세요. 정답: 11001

    ③ N진수 → 10진수 → M진수

    서로 다른 두 진법(N진법, M진법) 사이를 바로 바꾸는 공식은 없어요. 대신 10진수를 다리(중간 단계)로 거쳐가면 항상 변환할 수 있어요.

    예제) 8진수 17을 16진수로 바꾸기

    1단계 (8진수 → 10진수): 1×8 + 7 = 15

    2단계 (10진수 → 16진수): 15 ÷ 16 = 0 ... 나머지 15(F) → F

    → 8진수 17 = 16진수 F (둘 다 10진수 15와 같아요)

    ④ 8진수 ↔ 2진수 ↔ 16진수: 묶어서 빠르게 변환하기

    8(=2³)과 16(=2⁴)은 2의 거듭제곱이라서, 2진수와 아주 특별한 관계가 있어요.

    • 2진수 3자리 = 8진수 1자리
    • 2진수 4자리 = 16진수 1자리

    이 사실을 이용하면 자릿값 계산 없이, 2진수를 3자리씩 또는 4자리씩 묶기만 하면 빠르게 변환할 수 있어요.

    예제) 8진수 17 → 2진수 → 16진수

    1단계 (8진수 → 2진수, 한 자리를 3비트로): 1 = 001, 7 = 111 → 001 111 → 앞의 0을 지우면 1111

    2단계 (2진수 → 16진수, 4비트씩 묶기): 1111 → F

    → 8진수 17 = 2진수 1111 = 16진수 F = 10진수 15 (모두 같은 수예요!)

    ✏️ 직접 해보기: 2진수 110101을 8진수와 16진수로 각각 바꿔보세요.

    • 8진수: 3비트씩 묶기 → 110 101 → 6, 5 → 65
    • 16진수: 4비트씩 묶기 → 0011 0101 → 3, 5 → 35

    한눈에 보는 진법 비교표

    0부터 16까지를 10진수, 8진수, 2진수, 16진수로 동시에 적어보면 이렇게 돼요.

    10진수8진수2진수16진수
    0000
    1111
    22102
    33113
    441004
    551015
    661106
    771117
    81010008
    91110019
    10121010A
    11131011B
    12141100C
    13151101D
    14161110E
    15171111F
    16201000010

    8은 2진수로 4자리(1000), 8진수로는 자리올림이 일어나서 "10"이 되고, 16은 2진수로 5자리(10000), 16진수로는 자리올림이 일어나서 "10"이 돼요. 8 = 2³, 16 = 2⁴이기 때문에 8진수와 16진수는 2진수를 3자리/4자리씩 묶은 것과 정확히 일치해요.


    정리

    • 우리가 쓰는 10진법 외에도 컴퓨터가 쓰는 2진법, 8진법, 16진법이 있어요
    • N진법: 0~(N-1)까지 N개의 숫자를 쓰고, N이 되면 자리를 올리는 방법
    • N진수 → 10진수: 각 자리에 N의 거듭제곱을 곱해서 더하기
    • 10진수 → N진수: N으로 나누고 나머지를 거꾸로 읽기
    • N진수 → M진수: 10진수를 거쳐서 변환
    • 2진수 ↔ 8진수(3비트씩) ↔ 16진수(4비트씩)는 묶음으로 빠르게 변환 가능

    다음 레슨 출력문부터는 이 진법으로 표현된 값을 화면에 출력하는 방법을 배워요!

    직접 해보세요

    c