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 關鍵字設計以下程式解決 獲取當前作業...