char,short ,int ,long,long long,unsigned long long数据范围
速查表:
char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65535 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:18446744073709551615
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
詳細教程:
====================
符號屬性?長度屬性?基本型?所占位數?取值范圍?輸入符舉例?輸出符舉例?
-- -- char 8 -2^7 ~ 2^7-1 %c %c?、?%d?、?%u
signed -- char 8 -2^7 ~ 2^7-1 %c %c?、?%d?、?%u
unsigned -- char 8 0 ~ 2^8-1 %c %c?、?%d?、?%u
[signed] short [int] 16 -2^15 ~ 2^15-1 %hd
unsigned short [int] 16 0 ~ 2^16-1 %hu?、?%ho?、?%hx
[signed] -- int 32 -2^31 ~ 2^31-1 %d
unsigned -- [int] 32 0 ~ 2^32-1 %u?、?%o?、?%x
[signed] long [int] 32 -2^31 ~ 2^31-1 %ld
unsigned long [int] 32 0 ~ 2^32-1 %lu?、?%lo?、?%lx
[signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d
unsigned long long [int] 64 0 ~ 2^64-1 %I64u?、?%I64o?、?%I64x
-- -- float 32 +/- 3.40282e+038 %f?、?%e?、?%g
-- -- double 64 +/- 1.79769e+308 %lf?、?%le?、?%lg %f?、?%e?、?%g
-- long double 96 +/- 1.79769e+308 %Lf?、?%Le?、?%Lg
幾點說明:?
1.?注意?!?表中的每一行,代表一種基本類型。?“[]”?代表可省略。?
例如:?char?、?signed char?、?unsigned char?是三種互不相同的類型;?
int?、?short?、?long?也是三種互不相同的類型。?
2. char/signed char/unsigned char?型數據長度為?1?字節;
char?為有符號型,但與?signed char?是不同的類型。?
注意?!?并不是所有編譯器都這樣處理,?char?型數據長度不一定為?1?字節,?char?也不一定為有符號型。?
3.?將?char/signed char?轉換為?int?時,會對最高符號位?1?進行擴展,從而造成運算問題。?
所以?,?如果要處理的數據中存在字節值大于?127?的情況,使用?unsigned char?較為妥當。?
程序中若涉及位運算,也應該使用?unsigned?型變量。?
4. char/signed char/unsigned char?輸出時,使用格式符?%c?(按字符方式);?或使用?%d?、?%u?、?%x/%X?、?%o,按整數方式輸出;?輸入時,應使用?%c?,若使用整數方式,?Dev-C++?會給出警告,不建議這樣使用。?
5. int?的長度,是?16?位還是?32?位,與編譯器字長有關。?
16?位編譯器(如?TC?使用的編譯器)下,?int?為?16?位;?32?位編譯器(如?VC?使用的編譯器?cl.exe?)下,?int?為32位。?
6.?整型數據可以使用?%d?(有符號?10?進制)、?%o?(無符號?8?進制)或?%x/%X?(無符號?16?進制)方式輸入輸出。而格式符?%u?,表示?unsigned?,即無符號?10?進制方式。?
7.?整型前綴?h?表示?short?,?l?表示?long?。?
輸入輸出?short/unsigned short?時,不建議直接使用?int?的格式符?%d/%u?等,要加前綴?h?。這個習慣性錯誤,來源于?TC?。?TC?下,?int?的長度和默認符號屬性,都與?short?一致,于是就把這兩種類型當成是相同的,都用?int?方式進行輸入輸出。?
8.?關于?long long?類型的輸入輸出:?
"%lld"?和?"%llu"?是?linux?下?gcc/g++?用于?long long int?類型?(64 bits)?輸入輸出的格式符。?
而?"%I64d"?和?"%I64u"?則是?Microsoft VC++?庫里用于輸入輸出?__int64?類型的格式說明。?
Dev-C++?使用的編譯器是?Mingw32?,?Mingw32?是?x86-win32 gcc?子項目之一,編譯器核心還是?linux?下的?gcc?。
進行函數參數類型檢查的是在編譯階段,?gcc?編譯器對格式字符串進行檢查,顯然它不認得?"%I64d"?,?
所以將給出警告?“unknown conversion type character `I' in format”?。對于?"%lld"?和?"%llu"?,?gcc?理所當然地接受了。?
Mingw32?在編譯期間使用?gcc?的規則檢查語法,在連接和運行時使用的卻是?Microsoft?庫。?
這個庫里的?printf?和?scanf?函數當然不認識?linux gcc?下?"%lld"?和?"%llu"?,但對?"%I64d"?和?"%I64u"?,它則是樂意接受,并能正常工作的。?
9.?浮點型數據輸入時可使用?%f?、?%e/%E?或?%g/%G?,?scanf?會根據輸入數據形式,自動處理。?
輸出時可使用?%f?(普通方式)、?%e/%E?(指數方式)或?%g/%G?(自動選擇)。?
10.?浮點參數壓棧的規則:?float(4?字節?)?類型擴展成?double(8?字節?)?入棧。?
所以在輸入時,需要區分?float(%f)?與?double(%lf)?,而在輸出時,用?%f?即可。?
printf?函數將按照?double?型的規則對壓入堆棧的?float(?已擴展成?double)?和?double?型數據進行輸出。?
如果在輸出時指定?%lf?格式符,?gcc/mingw32?編譯器將給出一個警告。?
11. Dev-C++(gcc/mingw32)?可以選擇?float?的長度,是否與?double?一致。?
12.?前綴?L?表示?long?(?double?)。?
雖然?long double?比?double?長?4?個字節,但是表示的數值范圍卻是一樣的。?
long double?類型的長度、精度及表示范圍與所使用的編譯器、操作系統等有關。
轉載于:https://www.cnblogs.com/520sbc/p/9021763.html
總結
以上是生活随笔為你收集整理的char,short ,int ,long,long long,unsigned long long数据范围的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: String 源码解析
- 下一篇: Linux实战教学笔记13:定时任务补充