這裡,要先提到的是long、unsigned long、long long和unsigned long long,範例和表示法如下:
#include <stdio.h>
int main(void) {
long lnRet = 65535L;
unsigned long ulRet = 32767UL;
long long llnRet = 32767LL;
unsigned long long ullnRet = 65535ULL;
printf("lnRet = %ld \n", lnRet);
printf("lnRet = %lo \n", lnRet);
printf("lnRet = %lx \n", lnRet);
printf("lnRet = %lX \n", lnRet);
printf("\n");
printf("ulRet = %lu \n", ulRet);
printf("\n");
printf("llnRet = %lld \n", llnRet);
printf("llnRet = %llo \n", llnRet);
printf("llnRet = %llx \n", llnRet);
printf("llnRet = %llX \n", llnRet);
printf("\n");
printf("ullRet = %llu \n", ullRet);
return 0;
}
最後一部份則是float、double和long double的範例:#include <stdio.h>
int main(void) {
float fRet = 32768.5F;
double dRet = 65535.8;
long double ldRet = 98304.3L;
printf("fRet = %f \n", fRet);
// fRet = 32768.500000
printf("fRet = %e \n", fRet);
// fRet = 3.276850e+04
printf("fRet = %E \n", fRet);
// fRet = 3.276850E+04
printf("fRet = %g \n", fRet);
// fRet = 32768.5
printf("fRet = %G \n", fRet);
// fRet = 32768.5
printf("fRet = %a \n", fRet);
// fRet = 0x1.0001p+15
printf("fRet = %A \n", fRet);
// fRet = 0X1.0001P+15
printf("\n");
printf("dRet = %lf \n", dRet);
// dRet = 65535.800000
printf("dRet = %le \n", dRet);
// dRet = 6.553580e+04
printf("dRet = %lE \n", dRet);
// dRet = 6.553580E+04
printf("dRet = %lg \n", dRet);
// dRet = 65535.8
printf("dRet = %lG \n", dRet);
// dRet = 65535.8
printf("dRet = %la \n", dRet);
// dRet = 0x1.ffff99999999ap+15
printf("dRet = %lA \n", dRet);
// dRet = 0X1.ffff99999999AP+15
printf("\n");
printf("ldRet = %Lf \n", ldRet);
// ldRet = 98304.300000
printf("ldRet = %Le \n", ldRet);
// ldRet = 9.830430e+04
printf("ldRet = %LE \n", ldRet);
// ldRet = 9.830430E+04
printf("ldRet = %Lg \n", ldRet);
// ldRet = 98304.3
printf("ldRet = %LG \n", ldRet);
// ldRet = 98304.3
printf("ldRet = %La \n", ldRet);
// ldRet = 0xc.000266666666666p+13
printf("ldRet = %LA \n", ldRet);
// ldRet = 0XC.000266666666666P+13
return 0;
}
最後float、double和long double的部份稍為解釋一下:它們分別用關鍵字%f、%lf和%Lf來表示;預設的情況下,都是顯示到小數點以下第6位,同時也代表了它的精準度;假如只想顯示到小數點後2位的話,可以用%.02f,代表顯示到小數點後2位,不足2位者補0。%e (%E)的意思是─用科學記號法來表示。如:9.830430e+04就代表9.830430乘以10的4次方 (9.830430 * 10 ^ 4 = 9.830430 * 10,000 = 98304.30)。
%g (%G)的意思是由系統自行決定是否採用科學記號法來表示。
%a (%A)是C99的標準下針對浮點數、倍精數和雙倍精數所新增的表示法,會讓這些資料型態以16進制的方式輸出。
除此之外,還有一些奇奇怪怪地表示法:
%s: 顯示字串 (String),即針對資料型態為char *。
%p: 輸出此一變數的記憶體位址,例如:int a = 5; printf("%p \n", &a);
%n: 輸出至緩衝區的長度。
%5d: 輸出格式為整數 (int),最少輸出5位。
%06x: 輸出格式為16進制的整數,最少顯示6位,不足6位者補0。
%.07lf:輸出格式為倍精數 (double),顯示到小數點後7位,不足7位者補0。
%*d: 這種表示法,要帶兩個參數:int s = 10; printf("%*d \n", 5, s); 把s這個int列印出來,最少顯示5位。
%09.03Lf:輸出之資料型態為long double,最少顯示9位,不足9位者補0;小數點後最少顯示3位,不足3位者補0。
%*.*: int f = 10.63254F; printf("%*.* \n", 10, 2, f); 把f列印出來,最少顯示10位,顯示到小數點後2位。
%-: printf("%-5d \n", 10); 把10列印出來,最少顯示5位,且向左對齊。
%#: 針對八進制和16進制的輸出,加上前置符號;如:%#o、%#x或%#X,輸出結果類似:015、0x12ab、0XCDEF。
大致上就是這些吧!!
Reference:
1. Data type of C (I)
2. Data type of C (II)
沒有留言:
張貼留言