設計程式的時候我們一般會考慮的盡量的周全,尤其是像c這樣的靜態型別語言。
有一些溢位的問題就源於沒有搞清楚變數的大小範圍,所以我們編寫的時候需要特別注意
c的型別大小並沒有明確的定義,型別的大小取決於它所用的編譯器,所以說同乙份**,在不同平台下編譯。有可能會有不一樣的結果。
能確保的只有以下幾點
去檢視該平台的大小定義,ansi c中規定在該平台的標頭檔案應該有明確的定義
或者可以自己編寫程式測試
示例**如下:
#include int main() {
int size_byte_of_char = sizeof(char);
int size_of_char = size_byte_of_char*8 - 1;
int size_byte_of_short = sizeof(short int);
int size_of_short = size_byte_of_short*8 - 1;
int size_byte_of_int = sizeof(int);
int size_of_int = size_byte_of_int*8 - 1;
long int size_byte_of_long = sizeof(long int);
long int size_of_long = size_byte_of_long*8 - 1;
printf("char size = %d\n",(1<64位系統下執行結果:
kevin@~ $ gcc main.c -o intsize
kevin@~ $ intsize ./intsize
char size = 127
short size = 32767
int size = 2147483647
long size = 9223372036854775807
在c語言中有些庫幫我們做好這種事了
那就是
這裡面用巨集定義定義好了我們需要的大小的型別,例如int8_t、uint8_t、int16_t從8、16、32、64都有。
這個非常容易理解
8就是指長度為8位的整形,即最大127,最小-127。那麼加個u就是無符號的8位整形,即,0~255。
16、32依此類推。
總之,c是一門需要程式設計師多走一步的語言,它預設使用它的人懂得它的禁忌。
所以說c入門不難,但是深入理解它很難。只有實際碰到了才會知道它的各種特性。
最近實在有點懶,在這裡對我的粉絲們說聲對不起
C各個型別的大小
1個位元組 byte 是8bit.我採用的是64位系統,64位指cpu暫存器的資料寬度是64位的。short 和 int short比int更節省空間,short佔記憶體是int的一半,當要考慮程式的空間性而且short足以儲存所需資料的話就用short。float 和 double double精...
C語言中各種資料型別的大小
c語言 1.幾條規則 1 char型別一般是8bit,但ansi c裡沒有硬性規定其長度,某些嵌入式編譯器可能是16bit 2 short和long型別的長度不相同 3 int型別通常同具體機器的物理字長相同 4 short通常是16bits,int通常是16bits or 32bits每種編譯器可...
C語言中各種資料型別的大小
c語言 1.幾條規則 1 char型別一般是8bit,但ansi c裡沒有硬性規定其長度,某些嵌入式編譯器可能是16bit 2 short和long型別的長度不相同 3 int型別通常同具體機器的物理字長相同 4 short通常是16bits,int通常是16bits or 32bits每種編譯器可...