速查表:
char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295 (4 Bytes)long == intlong long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295 long long的最大值:9223372036854775807long long的最小值:-9223372036854775808unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807__int64的最小值:-9223372036854775808unsigned __int64的最大值:18446744073709551615
詳細(xì)教程:
====================符號屬性 長度屬性 基本型 所占位數(shù) 取值范圍 輸入符舉例 輸出符舉例 -- -- 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 型數(shù)據(jù)長度為 1 字節(jié); char 為有符號型,但與 signed char 是不同的類型。 注意 ! 并不是所有編譯器都這樣處理, char 型數(shù)據(jù)長度不一定為 1 字節(jié), char 也不一定為有符號型。 3. 將 char/signed char 轉(zhuǎn)換為 int 時,會對最高符號位 1 進(jìn)行擴(kuò)展,從而造成運算問題。 所以 , 如果要處理的數(shù)據(jù)中存在字節(jié)值大于 127 的情況,使用 unsigned char 較為妥當(dāng)。 程序中若涉及位運算,也應(yīng)該使用 unsigned 型變量。 4. char/signed char/unsigned char 輸出時,使用格式符 %c (按字符方式); 或使用 %d 、 %u 、 %x/%X 、 %o ,按整數(shù)方式輸出; 輸入時,應(yīng)使用 %c ,若使用整數(shù)方式, Dev-C++ 會給出警告,不建議這樣使用。 5. int 的長度,是 16 位還是 32 位,與編譯器字長有關(guān)。 16 位編譯器(如 TC 使用的編譯器)下, int 為 16 位; 32 位編譯器(如 VC 使用的編譯器 cl.exe )下, int 為 32位。 6. 整型數(shù)據(jù)可以使用 %d (有符號 10 進(jìn)制)、 %o (無符號 8 進(jìn)制)或 %x/%X (無符號 16 進(jìn)制)方式輸入輸出。 而格式符 %u ,表示 unsigned ,即無符號 10 進(jìn)制方式。 7. 整型前綴 h 表示 short , l 表示 long 。 輸入輸出 short/unsigned short 時,不建議直接使用 int 的格式符 %d/%u 等,要加前綴 h 。這個習(xí)慣性錯誤,來源于 TC 。 TC 下, int 的長度和默認(rèn)符號屬性,都與 short 一致,于是就把這兩種類型當(dāng)成是相同的,都用 int 方式進(jìn)行輸入輸出。 8. 關(guān)于 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 。 進(jìn)行函數(shù)參數(shù)類型檢查的是在編譯階段, gcc 編譯器對格式字符串進(jìn)行檢查,顯然它不認(rèn)得 "%I64d" , 所以將給出警告 “unknown conversion type character `I' in format” 。對于 "%lld" 和 "%llu" , gcc 理所當(dāng)然地接受了。 Mingw32 在編譯期間使用 gcc 的規(guī)則檢查語法,在連接和運行時使用的卻是 Microsoft 庫。 這個庫里的 PRintf 和 scanf 函數(shù)當(dāng)然不認(rèn)識 linux gcc 下 "%lld" 和 "%llu" ,但對 "%I64d" 和 "%I64u" ,它則是 樂意接受,并能正常工作的。 9. 浮點型數(shù)據(jù)輸入時可使用 %f 、 %e/%E 或 %g/%G , scanf 會根據(jù)輸入數(shù)據(jù)形式,自動處理。 輸出時可使用 %f (普通方式)、 %e/%E (指數(shù)方式)或 %g/%G (自動選擇)。 10. 浮點參數(shù)壓棧的規(guī)則: float(4 字節(jié) ) 類型擴(kuò)展成 double(8 字節(jié) ) 入棧。 所以在輸入時,需要區(qū)分 float(%f) 與 double(%lf) ,而在輸出時,用 %f 即可。 printf 函數(shù)將按照 double 型的規(guī)則對壓入堆棧的 float( 已擴(kuò)展成 double) 和 double 型數(shù)據(jù)進(jìn)行輸出。 如果在輸出時指定 %lf 格式符, gcc/mingw32 編譯器將給出一個警告。 11. Dev-C++(gcc/mingw32) 可以選擇 float 的長度,是否與 double 一致。 12. 前綴 L 表示 long ( double )。 雖然 long double 比 double 長 4 個字節(jié),但是表示的數(shù)值范圍卻是一樣的。 long double 類型的長度、精度及表示范圍與所使用的編譯器、操作系統(tǒng)等有關(guān)。
新聞熱點
疑難解答