C語(yǔ)言數(shù)據(jù)類型
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h> // limits.h頭文件提供當(dāng)前編譯器關(guān)于整數(shù)類型大小限制相關(guān)的詳細(xì)信息MAX/MIN
#include <float.h> // float.h頭文件提供當(dāng)前編譯器關(guān)于浮點(diǎn)類型大小限制相關(guān)的詳細(xì)信息MAX/MIN
int main(void)
{
int a = 1; // 整數(shù)類型int,數(shù)字1為int常量
long int la = 1L; //整數(shù)類型long int 用long修飾int,long的取值范圍應(yīng)大于等于int的取值范圍,在數(shù)字常量后面加L或小寫的l表示為long常量1L
long long int lla = 1L; // 整數(shù)類型long long int,應(yīng)至少占用8字節(jié)/64bit
short int sa = 1; // 整數(shù)類型short int 用short修飾int,short的取值范圍應(yīng)小于等于int的取值范圍
float f = 1.0f; //浮點(diǎn)類型float,可表示小數(shù)部分,C標(biāo)準(zhǔn)規(guī)定float類型必須至少能表示6位有效數(shù)字,且取值范圍至少是10^-37 ~ 10^+37,通常float占4字節(jié)/32bit,其中8位用于表示指數(shù)的值和指數(shù)的符號(hào),24位用于表示非指數(shù)部分(尾數(shù)或有效數(shù))的值和符號(hào)
double d = 1.0; //浮點(diǎn)類型double,雙精度浮點(diǎn),表示范圍大于等于float,數(shù)字1.0為浮點(diǎn)數(shù)常量double常量,浮點(diǎn)數(shù)常量需要加小數(shù)點(diǎn),(1.0可寫為1.)(而0.1可寫為.1) ,數(shù)字1.0f為float常量
long double ld = 1.0L; // 浮點(diǎn)類型long double,表示精度大于等于double,1.0L為long浮點(diǎn)數(shù)常量
char c = 'c'; // 字符類型character,c語(yǔ)言規(guī)定char占1字節(jié)/8bit,可直接表示ASCII碼的字符,實(shí)際存儲(chǔ)為整數(shù)類型
? unsigned int ua = 1; //unsigned無(wú)符號(hào)的,可用來(lái)修飾數(shù)值類型,有符號(hào)的數(shù)值會(huì)使用二進(jìn)制形式的首位作為符號(hào)位(首位為0則正數(shù),為1則負(fù)數(shù)),用unsigned修飾會(huì)使首位也作為數(shù)值,所以最大值為有符號(hào)類型的2倍+1,最小值為0,與之對(duì)應(yīng)的signed為有符號(hào)修飾詞
unsigned long long int ulla = 5llu; // 常量5llu
? a = 070; //八進(jìn)制數(shù),格式以0開頭,070即7*8^1+0*8^0=56
a = 0x70; //十六進(jìn)制,格式以0x開頭,0x70即7*16^1+0*16^0=112,無(wú)論將變量a表述成什么形式,內(nèi)部都是使用二進(jìn)制形式存儲(chǔ)
_Bool b = 1; //_Bool布爾類型,boolean,只分為1(即true)和0(即false)
printf("當(dāng)前編譯器規(guī)定int的最大值為%d\t最小值為%d\n", INT_MAX, INT_MIN);
// 當(dāng)前編譯器規(guī)定int的最大值為2147483647? ?最小值為-2147483648
printf("int上溢/超出上限%d\n", INT_MAX + 1); //int超出上限會(huì)變?yōu)樽钚≈?,因?yàn)樽畲笾档亩M(jìn)制表示為首位0后31位1(01111...),加1會(huì)變?yōu)槭孜?后31位0(10000...)即最小值
printf("%o\n", 8); //%o轉(zhuǎn)換說(shuō)明,將參數(shù)顯示為 無(wú)符號(hào) 八進(jìn)制形式,結(jié)果10
printf("%#o\n", 8); //要顯示為010則需要使用%#o轉(zhuǎn)換說(shuō)明
printf("%x\n", 15); //%x轉(zhuǎn)換說(shuō)明,將參數(shù)顯示為 無(wú)符號(hào) 十六進(jìn)制形式,結(jié)果f
printf("%#x\n", 15); //%#x轉(zhuǎn)換說(shuō)明顯示為0xf格式
printf("%llu\n", ulla); //轉(zhuǎn)換說(shuō)明%llu將參數(shù)顯示為unsigned long long int形式,%u表示unsigned int類型
printf("%hd\n", sa); //轉(zhuǎn)換說(shuō)明%hd將參數(shù)顯示為short形式,相對(duì)的%ho為八進(jìn)制short類型,%hx為十六進(jìn)制short類型
printf("當(dāng)前編譯器規(guī)定float的最大值為%e\t最小值為%e\n", FLT_MAX, FLT_MIN); //float類型使用轉(zhuǎn)換說(shuō)明%e顯示為指數(shù)形式如1.0e+1即1.0*10^1,使用%f表示十進(jìn)制形式如10.0,使用%g自動(dòng)判斷使用e或者f轉(zhuǎn)換說(shuō)明
// 當(dāng)前編譯器規(guī)定float的最大值為3.402823e+38? ? 最小值為1.175494e-38
printf("輸入一個(gè)ASCII碼值:");
scanf("%d", &a);
printf("值%d對(duì)應(yīng)的字符為%c\n", a, a); // a為int類型,%d將a作為int類型輸出,%c將a作為char類型輸出數(shù)值對(duì)應(yīng)的字符
/*結(jié)果
輸入一個(gè)ASCII碼值:65
值65對(duì)應(yīng)的字符為A
*/
printf("\aStartled by the sudden sound, Sally shouted,\n\"By the Great Pumpkin, what was that!\"\n"); // \a為蜂鳴符,某些識(shí)別該字符的設(shè)備會(huì)發(fā)出警報(bào)聲,\n為換行符,\t制表符,\b退格符使光標(biāo)往前移動(dòng)一格但不刪除該字符,\r回車符使光標(biāo)移至當(dāng)前行首位,\"表示雙引號(hào)",\'表示單引號(hào)'
d = 64.25; //單獨(dú)賦值
printf("變量d小數(shù)點(diǎn)形式%f\t指數(shù)形式%e\t十六進(jìn)制記數(shù)法%a\n", d, d, d);
//變量d小數(shù)點(diǎn)形式64.250000? ? ? ? 指數(shù)形式6.425000e+01? ? 十六進(jìn)制記數(shù)法0x1.0100000000000p+6
//%f表示為小數(shù)點(diǎn)形式,默認(rèn)有效數(shù)字位數(shù)為float的精度6位,可以通過(guò)%.2f更改為顯示2位小數(shù),%.f和%.0f同義
// 十六進(jìn)制記數(shù)法為顯示十六進(jìn)制的指數(shù)形式,0x1.0100000000000p+6即(1*16^0+1/16^2)*2^6,十六進(jìn)制的指數(shù)是2^n
d = 0xa.1fp10; //十六進(jìn)制double類型,十六進(jìn)制的a-f即十進(jìn)制的10-15,0xa.1fp10即(10+1/16+15/16^2)*2^10,這里的f指15而不是float,如果要表示float常量應(yīng)寫為0xa.1p10f
printf("char類型占用%zd字節(jié)\n", sizeof(char)); //sizeof(數(shù)據(jù)類型)返回?cái)?shù)據(jù)類型占用的字節(jié)數(shù),對(duì)應(yīng)的轉(zhuǎn)換說(shuō)明為%zd
// char類型占用1字節(jié)
printf("%zd\n", sizeof d);// sizeof也可用于返回變量占用的字節(jié)數(shù),這種情況既可以用括號(hào)的形式,也可以使用空格隔開不加括號(hào)的形式?double類型d占用8字節(jié)
printf("30 age = %f seconds\n", 30.0 * 3.156e7); // 30.0和3.156e7均為double常量
return 0;
}