1. 程式人生 > 其它 >c語言資料型別取值範圍

c語言資料型別取值範圍

技術標籤:C語言c語言

一、CPU位數和資料型別

在嵌入式開發中,不同資料型別的位數和取值範圍由CPU的位數決定,我們可以通過sizeof關鍵詞計算出每一種資料型別的範圍。

嵌入式開發中熟練掌握各資料型別的取值範圍是很有必要的,尤其在長期執行的裝置中。比如我們定義了一個int型別的資料,它的正向最大取值為2147483647,換算成天數:2147483647/1000/3600/24,大約是24.85天,如果你定義了一個每隔1ms加一的變數,那麼這個值最多隻能用24天,超過24天之後這個計數值就會出現基數問題,從而導bug的產生。

二、整數型別的取值範圍

不同資料型別在32位CPU和64位CPU上的位元組數和取值範圍如下:

資料型別32位CPU64位CPU32位CPU下取值範圍
char11-128~127 (-27~27-1)
unsigned char110~255 (0~28-1)
short int22-32767~32768 (-215~215-1)
unsigned short int220~65535 (0~216-1)
int44-2147483648~2147483647 (-231~231-1)
unsigned int440~4294967295 (0~232-1)
long48-2147483648~2147483647 (-231~231-1)
long long88(-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*));   
}

在這裡插入圖片描述