這裡,要先提到的是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)
沒有留言:
張貼留言