一把梭系列 ~ C語言範例 (0003) [資料型態(Data type)分析說明]

一把梭系列 ~ C語言範例 (0003) [資料型態(Data type)分析說明]

一把梭系列 ~ C語言範例 (0003) [資料型態(Data type)分析說明]


資料來源: https://openhome.cc/Gossip/CGossip/Datatype.html


★前言


★主題:

    程式在執行的過程中,需要運算許多的資訊,也需要儲存許多的資訊,資訊是儲存在記憶體空間中,由於資料的型態各不相同,在儲存時所需要的容量不一,不同的資料必須要配給不同的空間大小來儲存,因而有了資料型態(Data type)的規範。


    C語言的基本資料型態主要區分為:
        00.字元(Character)
        01.整數(Integer)
        02.浮點數(Float)
        03.倍精度 (Double)
    
    
★code

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("型態\t\t大小(bytes)\n");
    printf("char\t\t%lu\n", sizeof(char));    
    printf("short\t\t%lu\n", sizeof(short));
    printf("int\t\t%lu\n", sizeof(int));
    printf("long\t\t%lu\n", sizeof(long));
    printf("float\t\t%lu\n", sizeof(float));
    printf("double\t\t%lu\n", sizeof(double));
    printf("long double\t%lu\n", sizeof(long double));
    return 0;
}


★結果:



★延伸說明:

    由於平台(x32/x64/單晶片)不同,你的執行結果不一定會與這邊相同;因為每種資料型態佔有的記憶體大小不同,因而可以儲存的數值範圍也就不同。

    例如在上例中,整數 int 的記憶體空間是 4 個位元組(bytes),可以儲存的整數範圍為 -2147483648 至 2147483647,如果儲存值超出這個範圍的話稱之為「溢值」 (Overflow),會造成程式不可預期的結果。

    整數計算範圍的方式很簡單,例如 int 整數佔 4 位元組的話,可儲存範圍為 2^32 / 2,除以 2 是因為要分另一半儲存負整數的關係,整數的最左邊位元被用來表示正負號,如果最左邊位元為 0 表示正號,若為 1 表示負號。

    在 C 中可以使用 signed、unsigned 宣告有號、無號整數,無號整數最左邊位元不用來表示正負號,例如一個 8 位元字元被用來表示整數時,可以表示數值 -128 到 127,而一個無號字元可以表示 0 到 255 的正整數。

    size_t 是個機器特定的無號型態,定義於 stddef.h 標頭檔,保證夠大可以容納任何物件,若資料結構具有長度或索引概念,而且需要很大的容量,例如陣列,可以使用 size_t 型態變數來實作長度或索引。

    浮點數的儲存方式則是分為兩個部份,例如 float 佔四個位元組的話,前三個位元組用來儲存假數,後一個位元組儲存指數,例如 3.14 * 10^8, 3.14 儲存在前三位元組,而 8 儲存於後一位元組,所以 float 大致上可以儲存的範圍為 10^38 到 10^-38(就指數來算出的),而 double 可以大致儲存 10^308 至 10^-308 之間的數值。

One thought on “一把梭系列 ~ C語言範例 (0003) [資料型態(Data type)分析說明]

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *