꼼꼼한 책 설명 덕분에 하루하루 정진하고 있습니다.
자연스레 진도를 나갈수록 앞부분의 내용과 비교하며 공부를 하게 되는데 몇가지 질문이 있습니다.
p.131을 보면
10진수와 16진수에도 접미사를 사용할 수 있다고 합니다.
그래서 예제를 보면
printf("0%lo\n", 017L);
printf("0%lo\n", 017UL);
printf("0x%lX\n", 0x7FFFFFL);
printf("0x%lX\n", 0xFFFFFFFFUL);
이라고 되어 있습니다.
여기서 서식 지정자가 이해가 잘 되질 않습니다.
예를 들면 앞에 배웠던 내용들을 비추어 다시 예제를 봤을 때
017L 이면 서식 지정자가 0%ldo
017UL 이면 서식 지정자가 0%luo
0x7FFFFFL 이면 서식 지정자가 0x%ldX
0xFFFFFFFFUL 이면 서식 지정자가 0x%luX
이렇게 되야 맞지 않는가 의문이 듭니다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
그리고 바로 밑의 실수 리터럴 접미사 예제를 보면
printf("%f\n", 1.0e-5f);
printf("%f\n", 1.0e-5F);
printf("%f\n", 1.0e-5);
printf("%Lf\n", 1.0e-5l);
이라고 되어 있는데 여기서도 서식 지정자가 이해가 잘 되지 않습니다.
지수 표기법으로 출력을 하는 것 같은데 그렇다면
printf("%e\n", 1.0e-5f);
printf("%e\n", 1.0e-5F);
printf("%e\n", 1.0e-5);
printf("%Le\n", 1.0e-5l);
가르침을 주시면 감사하겠습니다.
앞에 0을 붙여서 017로 쓴 것은 8진수입니다.
책의 본문에는 '8진수와 16진수에도 접미사를 사용할 수 있습니다'라고 되어 있습니다. '10진수와 16진수에도 접미사를 사용할 수 있습니다'라고 쓰여 있지 않습니다.
빈자리에 공백을 채우기 위해 쓰는 0과 8진수를 구분하기 위해 쓰는 접두사 0을 혼동하는 것 같습니다.
--------------
서식 지정자를 사용할 때, 숫자 타입(정수, 실수)와 그 크기(부호 있는/없는, short/long/long long)에 따라 다른 서식 지정자를 사용해야 합니다. 그래서 예제에서 사용된 서식 지정자들은 다음과 같습니다.
- printf("0%lo\n", 017L);: 8진수 long (long int) 출력, 접미사 L 사용
- printf("0%lo\n", 017UL);: 8진수 unsigned long (unsigned long int) 출력, 접미사 UL 사용
- printf("0x%lX\n", 0x7FFFFFL);: 16진수 long (long int) 출력, 접미사 L 사용
- printf("0x%lX\n", 0xFFFFFFFFUL);: 16진수 unsigned long (unsigned long int) 출력, 접미사 UL 사용
여기서 %l은 "long int" 타입의 출력을 의미합니다. 접미사는 해당 변수가 어떤 타입인지 나타내주는 것이므로, 서식 지정자에서는 사용하지 않습니다.
또한, 실수 리터럴의 경우에는 e(E) 접미사를 사용하여 지수 표기법으로 출력할 수 있습니다. 따라서 예제에서 사용된 서식 지정자는 다음과 같습니다.
- printf("%f\n", 1.0e-5f);: float 출력, 지수 표기법 사용하지 않음
- printf("%f\n", 1.0e-5F);: float 출력, 지수 표기법 사용하지 않음
- printf("%f\n", 1.0e-5);: double 출력, 지수 표기법 사용하지 않음
- printf("%Lf\n", 1.0e-5l);: long double 출력, 지수 표기법 사용하지 않음
- printf("%Lf\n", 1.0e-5L);: long double 출력, 지수 표기법 사용하지 않음
여기서 %f는 "float" 타입의 출력을 의미합니다. 지수 표기법을 사용하려면 %e(E)를 사용해야 합니다.