C 언어 기초: 다양한 진법 표현과 printf 함수 활용법

진법(Number System)의 이해

컴퓨터 프로그래밍에서 데이터를 다룰 때 숫자를 표현하는 방식은 매우 다양합니다. 우리가 일상에서 사용하는 방식은 10진수이지만, 컴퓨터 내부에서는 2진수를 기반으로 동작합니다. C 언어에서는 개발자의 편의를 위해 10진수 외에도 2진수, 8진수, 16진수라는 네 가지 주요 진법을 지원합니다.

1. 10진수 (Decimal)

0부터 9까지의 숫자를 사용하여 수를 표현하며, 값이 10이 될 때 자리올림이 발생하는 방식입니다. 우리가 가장 흔히 접하는 숫자 표현법입니다.

2. 2진수 (Binary)

컴퓨터가 데이터를 처리하는 근본적인 방식입니다. 0과 1 두 개의 숫자만 사용하며, 2가 될 때 자리올림이 발생합니다. C 언어에서 2진수를 직접 작성할 때는 숫자 앞에 0b 또는 0B를 붙여 구분합니다.

int binaryValue = 0b1010; // 10진수로 10

2진수를 10진수로 변환할 때는 각 자릿수에 2의 거듭제곱을 곱하여 합산합니다. 예를 들어 0b1011은 다음과 같이 계산됩니다:
(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11

3. 8진수 (Octal)

0부터 7까지의 숫자를 사용하며, 8이 될 때 자릿수가 넘어갑니다. C 언어에서 8진수를 표현하려면 숫자 앞에 0을 붙입니다. 예를 들어 012는 10진수로 10을 의미합니다.

int octalValue = 012; // 10진수로 10

4. 16진수 (Hexadecimal)

0~9까지의 숫자와 A~F(10~15에 해당)까지의 문자를 혼용하여 수를 표현합니다. 16진수 하나는 2진수 4비트를 한 번에 표현할 수 있어 메모리 주소나 색상 코드 표기에 자주 쓰입니다. 앞에 0x 또는 0X를 붙여 나타냅니다.

int hexValue = 0x1A; // 10진수로 26 (1*16 + 10)

변수에 진법 데이터 저장하기

어떤 진법으로 코드를 작성하더라도, 컴퓨터 메모리에는 최종적으로 2진수 형태로 저장됩니다. 프로그래머는 상황에 따라 가장 직관적인 진법을 선택하여 변수에 대입하면 됩니다.

#include <stdio.h>

int main() {
    int bin = 0b1101;  // 2진수 (13)
    int oct = 017;     // 8진수 (15)
    int dec = 25;      // 10진수
    int hex = 0x2F;    // 16진수 (47)

    return 0;
}

printf 함수를 이용한 데이터 출력

표준 출력 함수인 printf를 사용하면 변수에 저장된 값을 원하는 진법 형식으로 화면에 출력할 수 있습니다. 이때 사용되는 제어 문자를 서식 지정자(Format Specifier)라고 합니다.

1. 정수 출력을 위한 서식 지정자

가장 많이 사용되는 서식 지정자는 다음과 같습니다.

  • %d: 10진수 정수 형식으로 출력
  • %o: 8진수 정수 형식으로 출력
  • %x: 16진수 정수 형식으로 출력 (소문자)
  • %X: 16진수 정수 형식으로 출력 (대문자)

2. printf 활용 예제

변수의 값을 여러 가지 형식으로 출력하는 방법은 아래와 같습니다. \n은 출력을 마친 후 줄을 바꾸는 제어 문자입니다.

#include <stdio.h>

int main() {
    int myData = 31;

    // 10진수 출력
    printf("10진수: %d\n", myData);
    
    // 8진수 출력
    printf("8진수: %o\n", myData);
    
    // 16진수 출력
    printf("16진수: %x\n", myData);

    return 0;
}

3. 다중 값 출력

하나의 printf 문장에서 여러 개의 변수나 상수를 동시에 출력할 수도 있습니다. 서식 지정자의 순서와 전달하는 변수의 순서가 일치해야 합니다.

#include <stdio.h>

int main() {
    int score = 95;
    int rank = 1;

    printf("점수: %d, 순위: %d\n", score, rank);
    
    // 상수를 직접 출력할 수도 있음
    printf("상수 출력: %d\n", 100);

    return 0;
}

이처럼 printf 함수는 단순히 텍스트를 출력하는 것을 넘어, 변수의 데이터를 인간이 읽기 좋은 형태의 진법으로 변환하여 보여주는 강력한 도구입니다.

태그: C Binary Hexadecimal Printf DataTypes

7월 31일 04:31에 게시됨