8.13.2013

Data type of C (II)

好!! 我們延續上一篇文章。上一篇文章最後我們提到各個資料型態的初始化和宣告,如下:
int nRet = 0;
unsigned int unRet = 0U;
short hRet = 0;
unsigned short uhRet = 0;
long lnRet = 0L;
unsigned long ulnRet = 0UL;
char cKey = '\0';
unsigned char ucKey = '\0';
long long llnRet = 0LL;
unsigned long long ullnRet = 0ULL;
float fRet = 0F;
double dRet = 0;
long double ldRet = 0L;
其中比較特別的是,當dRet宣告成倍精數的資料型態,且初始化為0,這個0會自動地以倍精數的型態來儲存;若是像ldRet宣告成long double,且初始化為0,這個時後就必須加上後置的L,變成0L,告訴電腦,這個ldRet = 0L必須要以long double的型態來儲存

最後,人們也不易記住的,就是這些資料型態在printf()時該如何表示?? 直接用範例來說明會比較快:
#include <stdio.h>

int main(void) {

    int nRet = 188;
 
    printf("nRet = %d \n", nRet);
    // nRet = 188, 十進位表示法
    printf("nRet = %o \n", nRet);
    // nRet = 274, 八進位表示法
    printf("nRet = %x \n", nRet);
    // nRet = bc, 16進位表示法
    printf("nRet = %X \n", nRet);
    // nRet = BC, 16進位表示法 

    return 0;
}
八進位表示法的部份,用關鍵字%o來表示;字母o表示的是八進位的英文Octal,來做為後置修飾;同理,在16進位的部份,%x%X的差異在於呈現出來的16進制的字母大小寫的差別。X (x)代表的是英文的16進位,Hexadecimal

在接下來的範例中,不論是%o或是%X、%x都是同樣的意思,就不再贅述了。
#include <stdio.h>

int main(void) {

    unsigned int unRet = 40U;
 
    printf("unRet = %u \n", unRet);

    retuen 0;
}
unsigned int的部份就簡單多了,就只有%u%uo%uO%ux%uX或者是%ou%Ou%xu%Xu這些都是沒有意義的。
#include <stdio.h>

int main(void) {

    short hRet = 1000;
    unsigned short uhRet = 2000;
    char cKey = '\0';
    unsigned char ucKey = 'R';
 
    printf("hRet = %d \n", hRet);
    printf("uhRet = %u \n", uhRet);
    printf("cKey = %c \n", cKey);
    printf("ucKey = %c", ucKey);

    return 0;
}
短整數 (short, unsigned short)的部份也很容易理解,它的宣告方式和int一樣,不需要任何的後贅修飾;字元的部份也很簡單,不管是否有signed或unsigned,都是用%c來表示。

(To be continue....)

Reference: Data type of C (I)

沒有留言:

張貼留言