🎮 오늘의 기술 키워드

 

컴퓨터는 이진수(0과 1)만 이해하며, 사람이 작성한 코드는 컴파일이라는 과정을 거쳐 기계어로 번역된다.

이를 위해 전처리/전처리기가 먼저 코드를 가공한다.

 

진수(Radix)는 숫자를 표현하는 체계로, 10진수 외에 컴퓨터의 언어인 2진수와 사람이 읽기 편한 16진수가 주로 사용된다.

 

비트마스크는 이 진수 개념을 활용하여 여러 상태를 효율적으로 관리하는 기법이다.

 

오늘 한 내용

  • printf와 std::cout의 출력 방식 차이점 확인
  • #include 지시문을 활용한 헤더 파일 포함
  • 상대 경로와 절대 경로의 개념 및 활용법 이해
  • 10진수 → 2진수 → 16진수 변환법 확인

특히 서식 지정자의 위치에 대해 궁금증이 생겨 조금 팠다.

🎮서식 지정자의 위치

서식 지정자는 출력될 문자열의 틀을 정하는 포맷 문자열(format string) 내부에 위치한다.

이 포맷 문자열은 함수 호출 시 가장 첫 번째 인자로 전달된다.

 

#include <cstdio>

int main() {
    int number = 123;
    printf("The number is %d\n", number);
    return 0;
}

 

  • "The number is %d\n" 부분이 포맷 문자열.
  • %d가 바로 서식 지정자이며, 이 위치에 변수 number의 값이 들어감.

 

 

🎮서식 지정자의 작성 순서와 규칙

 

서식 지정자는 % 문자로 시작하며, 그 뒤에 오는 문자들이 특정 규칙을 따른다.

기본 형식: %[플래그][폭][정밀도][길이]타입

  • %: 서식 지정자의 시작을 알리는 필수 문자.
  • 타입: 출력할 데이터의 종류를 결정하는 가장 중요한 부분.
    • d 또는 i: 10진수 정수
    • f: 부동 소수점(실수)
    • c: 단일 문자
    • s: 문자열
    • x: 16진수
    • o: 8진수
  • 플래그 (선택 사항): 출력 방식에 대한 추가 옵션을 지정.
    • -: 왼쪽 정렬
    • +: 양수에 + 기호를 붙여 출력
    • 0: 남는 공간을 0으로 채움
  • (선택 사항): 출력될 최소 너비를 지정.
    • %5d: 최소 5칸을 확보하고 정수를 출력.
  • 정밀도 (선택 사항): 소수점 아래 자리수나 문자열의 길이를 지정.
    • %.2f: 소수점 아래 2자리까지만 출력.
  • 길이 (선택 사항): 변수의 크기를 지정.
    • ld: long int
    • lld: long long int

🎮규칙

위의 기본 형식에서 알 수 있듯이, 서식 지정자는 % 뒤에 정해진 순서대로 규칙에 맞게 작성해야 한다. %로 시작하고, 가장 마지막에 타입이 와야만 올바르게 인식된다.

 

예시:

  • %-10.2f:
    • -: 플래그(왼쪽 정렬)
    • 10: 폭(최소 10칸)
    • .2: 정밀도(소수점 2자리)
    • f: 타입(실수)

이 규칙을 따르지 않으면 컴파일 오류가 발생하거나 예상치 못한 결과가 나올 수 있다.

 

 


🌍 생각의 연결점

  • 영화 시나리오 작가 → 고급 언어(C++)는 시나리오, 컴파일러는 감독, 기계어는 배우의 연기. 감독(컴파일러)은 시나리오를 읽고 배우(기계어)가 연기할 수 있는 언어로 변환한다. 이런 느낌이기는 했다.
  • 파일 관리 → 상대 경로 개념은 마치 폴더의 '트리 구조'를 이용해 목적지를 지정하는 것과 같다. 프로젝트를 통째로 옮겨도 내부 파일 경로가 깨지지 않는 것처럼, 상대 경로는 코드의 이식성을 높여준다는 것을 이해했다.

🧠 깨달음 & 질문

 

이해한 내용

 

  • std::cout은 printf보다 사용하기 편리하고 안전하다.
  • std::cout은 자료형을 자동으로 인식하므로 서식 지정자를 외울 필요가 없다.
  • 서식 지정자에는 다양한 옵션이 있지만, 가장 중요한 것은 출력할 데이터의 '타입'을 정확하게 지정하는 것이다.
  • printf와 서식 지정자는 단순히 값을 출력하는 기능이 아니라, 출력될 값의 형태와 형식을 정교하게 제어하기 위한 도구, 단순한 값 출력부터 정렬, 자릿수, 기호까지 섬세하게 다룰 수 있다.
  • printf의 서식 지정자가 복잡해 보이지만, % 뒤에 플래그, 폭, 정밀도, 길이, 타입이라는 정해진 순서와 규칙이 있다는 것을 알면 쉽게 이해할 수 있다.
  • std::cout이 자료형을 자동으로 처리해 편리하지만, printf의 서식 지정자를 통해 출력 형식을 직접 제어하는 것이 때로는 더 명확하고, 특히 메모리 사용량이 중요한 저수준 프로그래밍에서는 유용할 수 있다는 것을 알게 되었다.

 

생각나는 질문

 

  • 컴파일러가 #include로 가져온 코드를 어떻게 효율적으로 관리하는지 더 깊이 궁금해졌다. 
  • 비트마스크를 사용했을 때와 안 썼을 때의 성능 차이를 직접 체감할 수 있을까?

 


 

🧵 연결 태그

#컴파일러 #개발자의생산성 #코드의이식성 #프로그래밍

 


 

📌 오늘의 메모 한 줄

"무한 반복해야겠다.."

 


 

🌱 내일을 위한 메모

std::cout과 printf의 성능 차이점 직접 찾아보기.