%d 형식 지정자란?
%d 형식 지정자는 정수 값을 부호 있는 10진수(signed decimal integer)로 처리합니다. 즉, 값이 양수이든 음수이든 상관없이 항상 10진수 형태로 해석되어 출력됩니다.
다음은 C 언어에서 %d 형식 지정자를 사용한 예제입니다.
예제
#include <stdio.h>
int main() {
int v1 = 7456;
int v2 = -17346;
printf("10진수 형태의 값 : %d\n", v1);
printf("음수 형태의 값 : %d", v2);
return 0;
}
실행 결과
10진수 형태의 값 : 7456 음수 형태의 값 : -17346
%i 형식 지정자란?
%i 형식 지정자 역시 정수 값을 처리하지만, 10진수뿐만 아니라 8진수와 16진수도 인식할 수 있다는 점이 특징입니다. 숫자 앞에 0을 붙이면 8진수로, 0x를 붙이면 16진수로 해석됩니다.
다음은 C 언어에서 %i 형식 지정자를 사용한 예제입니다.
예제
#include <stdio.h>
int main() {
int v1 = 1327;
int v2 = 0x42451;
printf("10진수 형태의 값 : %d\n", v1);
printf("16진수 리터럴의 값 : %i", v2);
return 0;
}
실행 결과
10진수 형태의 값 : 1327 16진수 리터럴의 값 : 271441
%d와 %i의 차이점 정리
출력 함수인 printf()에서 %d와 %i는 사실상 동일하게 동작하며, 둘 다 값을 부호 있는 10진수로 출력합니다. 두 지정자의 실질적인 차이는 입력 함수인 scanf()에서 드러납니다.
- %d : 입력값을 항상 10진수로만 해석합니다.
- %i : 입력값의 접두사에 따라 10진수, 8진수(
0접두사), 16진수(0x접두사)를 자동으로 구분하여 해석합니다.
따라서 사용자 입력처럼 다양한 진법이 들어올 수 있는 상황에서는 %i가 유용하고, 항상 10진수만 다룬다면 의미를 더 명확히 드러내는 %d를 사용하는 것이 좋습니다.