진법(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 함수는 단순히 텍스트를 출력하는 것을 넘어, 변수의 데이터를 인간이 읽기 좋은 형태의 진법으로 변환하여 보여주는 강력한 도구입니다.