C語言中資料型別取值範圍

2021-10-10 18:36:35 字數 1674 閱讀 3396

c語言中的資料型別有void、char、short、int、float、double。由於void是空型別,因此以下主要介紹char、short、int、float、double的取值範圍。

1、signed char

1個位元組,取值範圍:-128~127。,最大值為127容易理解,0111 0111,最高位為符號位;最小值為什麼不是-127而是-128呢,1111 1111不是-127嗎?

-1從原碼到補碼的轉換過程:1000 0001 -> 1111 1110 -> 1111 1111

-2從原碼到補碼的轉換過程:1000 0010 -> 1111 1101 -> 1111 1110

-3從原碼到補碼的轉換過程:1000 0011 -> 1111 1100 -> 1111 1101

…從以上補碼不難找出規律,-(n+1)的補碼是在-n補碼的基礎上-1得到。

-127從原碼到補碼的轉換過程:1111 1111 -> 1000 0000 -> 1000 0001

推出-128的補碼為1000 0000,恰好補碼1000 0000也空閒著,順理成章地規定1000 0000為-128的補碼,而機器中資料是以補碼的方式儲存的,因此,signed char型別的取值範圍為-128~127。

1.1下面舉幾個溢位的例子:

1 1000 0001 //-129的原碼
溢位位捨棄,-129的補碼為0111 1111,符號位為0,正數的補碼等於原碼,認為是127的原碼。因此-129溢位後的值為127。

0 1000 0001 //129的原碼
正數的原碼即補碼,因此捨棄溢位位後存入機器的補碼為1000 0001,轉換成原碼就是1111 1111,即-127。

1000 0000 //128的原碼
補碼1000 0000,所以存進機器的是1000 0000,1000 0000,即-128。

1 1001 0000 //400的原碼
正數的原碼即補碼,因此捨棄溢位位後存入機器的補碼為1001 0000,轉換為原碼為1111 0000,即-112。

1 1100 1000 //-200的原碼
捨棄溢位位後存入機器的補碼為0011 1000,符號位為0,正數的補碼等於原碼,認為是56的原碼。因此-200溢位後的值為56。

1.2、溢位計算總結

步驟一:先根據值來得到補碼。

步驟二:由步驟一得到的補碼捨棄溢位位後得到存入機器的補碼。

步驟三:根據存入機器的補碼反推得到原碼。

2、unsigned char

1個位元組,取值範圍:0~255。

1、signed short

2個位元組,取值範圍:-32768~32767。

2、unsigned short

2個位元組,取值範圍:0~65535。

1、signed int

4個位元組,取值範圍:-2147483648~2147483647。

1、unsigned int

4個位元組,取值範圍:0~4294967295。

4個位元組,取值範圍:-3.4*10^38~3.4*10^38。

8個位元組,取值範圍:-2^1024~2^1024。

C語言各種資料型別取值範圍

速查表 char 128 127 1 byte short 32768 32767 2 bytes unsigned short 0 65536 2 bytes int 2147483648 2147483647 4 bytes unsigned int 0 4294967295 4 bytes l...

C語言各資料型別大小和取值範圍

因為cpu的差異,各系統中的資料型別所佔的位元組數 bytes 不同,二進位制位數 bit 也不同。那麼怎樣才能知道自己系統的資料型別的位元組數,位數呢?授之以魚不如授之以漁,大家可以自己從電腦裡獲取這些資訊。首先我們知道1個位元組等於8個位,可以用sizeof 關鍵字設計以下程式解決 獲取當前作業...

C語言各資料型別大小和取值範圍

因為cpu的差異,各系統中的資料型別所佔的位元組數 bytes 不同,二進位制位數 bit 也不同。那麼怎樣才能知道自己系統的資料型別的位元組數,位數呢?授之以魚不如授之以漁,大家可以自己從電腦裡獲取這些資訊。首先我們知道1個位元組等於8個位,可以用sizeof 關鍵字設計以下程式解決 獲取當前作業...