c語言資料型別取值範圍
阿新 • • 發佈:2020-12-31
一、CPU位數和資料型別
在嵌入式開發中,不同資料型別的位數和取值範圍由CPU的位數決定,我們可以通過sizeof關鍵詞計算出每一種資料型別的範圍。
嵌入式開發中熟練掌握各資料型別的取值範圍是很有必要的,尤其在長期執行的裝置中。比如我們定義了一個int型別的資料,它的正向最大取值為2147483647,換算成天數:2147483647/1000/3600/24,大約是24.85天,如果你定義了一個每隔1ms加一的變數,那麼這個值最多隻能用24天,超過24天之後這個計數值就會出現基數問題,從而導bug的產生。
二、整數型別的取值範圍
不同資料型別在32位CPU和64位CPU上的位元組數和取值範圍如下:
資料型別 | 32位CPU | 64位CPU | 32位CPU下取值範圍 |
---|---|---|---|
char | 1 | 1 | -128~127 (-27~27-1) |
unsigned char | 1 | 1 | 0~255 (0~28-1) |
short int | 2 | 2 | -32767~32768 (-215~215-1) |
unsigned short int | 2 | 2 | 0~65535 (0~216-1) |
int | 4 | 4 | -2147483648~2147483647 (-231~231-1) |
unsigned int | 4 | 4 | 0~4294967295 (0~232-1) |
long | 4 | 8 | -2147483648~2147483647 (-231~231-1) |
long long | 8 | 8 | (-263~263-1) |
三、64位ubuntu下計算出的各資料型別佔用的位元組數
int main() { printf("int:%d\r\nunsigned int:%d\r\nshort int:%d\r\nlong:%d\r\nlong long:%d\r\nchar:%d\r\nunsigned char:%d\r\nfloat:%d\r\ndouble:%d\r\nbool:%d\r\nint*:%d\r\n", sizeof(int),sizeof(unsigned int),sizeof(short int),sizeof(long),sizeof(long long),sizeof(char),sizeof(unsigned char),sizeof(float),sizeof(double),sizeof(bool),sizeof(int*)); }