欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語(yǔ)言---數(shù)據(jù)的存儲(chǔ)-創(chuàng)新互聯(lián)

目錄

一、數(shù)據(jù)存儲(chǔ)

創(chuàng)新互聯(lián)于2013年開(kāi)始,先為高碑店等服務(wù)建站,高碑店等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為高碑店企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

二、數(shù)據(jù)存儲(chǔ)類(lèi)型分類(lèi)

1、整型家族

2、浮點(diǎn)型家族

3、自定義類(lèi)型

4、指針類(lèi)型

5、空類(lèi)型

三、整型家族在內(nèi)存中的存儲(chǔ)

1、大小端的理解

2、大小端直觀內(nèi)存顯示圖:

3、大小端存儲(chǔ)的方式如何檢測(cè)

4、整型家族內(nèi)存中的存儲(chǔ)方式

a、原碼反碼補(bǔ)碼:? ??

b:數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

四、浮點(diǎn)型家族在內(nèi)存中的存儲(chǔ)

1、IEEE的存儲(chǔ)規(guī)則

2、浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)

五、總結(jié):


一、數(shù)據(jù)存儲(chǔ)

基本數(shù)據(jù)類(lèi)型

char? ? ? ? ? ? // 字符數(shù)據(jù)類(lèi)型? ? ? ? ? ?1個(gè)字節(jié) short? ? ? ? ?? // 短整型? ? ? ? ? ? ? ? ? ? ? 2個(gè)字節(jié) int? ? ? ? ? ? ?? // 整形? ? ? ? ? ? ? ? ? ? ? ? ? 4個(gè)字節(jié)?? long? ? ? ? ? ? // 長(zhǎng)整型? ? ? ? ? ? ? ? ? ? ? 4個(gè)字節(jié)?? long long? ? // 更長(zhǎng)的整形? ? ? ? ? ? ? ?8個(gè)字節(jié) float? ? ? ? ? ? // 單精度浮點(diǎn)數(shù)? ? ? ? ? ?4個(gè)字節(jié) double? ? ? ? // 雙精度浮點(diǎn)數(shù)? ? ? ? ? ?8個(gè)字節(jié)? ?
二、數(shù)據(jù)存儲(chǔ)類(lèi)型分類(lèi) 1、整型家族
char :? ? ? ? ? ? ? ? ? ? ? ? ? 取值范圍? unsigned char? ? ? ? ? ? ? 0~255 ? ? signed char? ? ? ? ? ? ? -128~127 short: unsigned?short [ int ]? ? ? 0~65,535 ? ? signed short [ int ]? ? ? -32768~32,767 int: unsigned int? ? ? ? ? ? ? ? ? 0~4,294,967,295 ? ? signed int? ? ? ? ? ? ? ? ? -2,147,483,648~2,147,483,647 long: unsigned long [ int ]? ? ? ?? 0~4,294,967,295 ? ? signed long [ int ]? ? ? ? -2,147,483,648~2,147,483,647
2、浮點(diǎn)型家族
float double long double
3、自定義類(lèi)型
結(jié)構(gòu)體類(lèi)型? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? struct ? 枚舉類(lèi)型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? enum 聯(lián)合類(lèi)型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? union
4、指針類(lèi)型

char*? ? ? ? ??

short*? ? ?? int*? ? ? ? ? ? ?? long*? ? ? ? ?? long long*? ? float*? ? ? ? ?? double*? struct* pc? void* ?
5、空類(lèi)型

void? ? ?空類(lèi)型(用于函數(shù)的返回類(lèi)型、函數(shù)的參數(shù)、指針類(lèi)型)

三、整型家族在內(nèi)存中的存儲(chǔ) 1、大小端的理解

? 數(shù)據(jù)是從低位向高位進(jìn)行存儲(chǔ),但在數(shù)據(jù)的存儲(chǔ)過(guò)程中,數(shù)據(jù)在從低位向高位的存放順序不一,從而形成了兩種數(shù)據(jù)存放的模式:大端模式和小端模式

大端(存儲(chǔ))模式: ? ? 是指數(shù)據(jù)的低位字節(jié)內(nèi)容保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位字節(jié)內(nèi)容保存在內(nèi)存的低地址中; 小端(存儲(chǔ))模式: ? ? 是指數(shù)據(jù)的低位字節(jié)內(nèi)容保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位字節(jié)內(nèi)容保存在內(nèi)存的高地址中。
2、大小端直觀內(nèi)存顯示圖:

3、大小端存儲(chǔ)的方式如何檢測(cè)

4、整型家族內(nèi)存中的存儲(chǔ)方式

? 整型家族在內(nèi)存中的存儲(chǔ)是以補(bǔ)碼的方式進(jìn)行存儲(chǔ),再講他們的存儲(chǔ)之前先講一下什么是原碼反碼補(bǔ)碼。原碼反碼補(bǔ)碼在32位機(jī)上是32比特位,在64機(jī)位上是64比特位。

a、原碼反碼補(bǔ)碼:? ??

? ①原反補(bǔ)碼中:第一位符號(hào)位,其余幾位為數(shù)據(jù)值位。

②原碼反碼補(bǔ)碼

正數(shù)的符號(hào)位為0,原碼的數(shù)值位為該數(shù),原碼反碼補(bǔ)碼相同

負(fù)數(shù)的符號(hào)位為1,原碼的數(shù)值位為該數(shù),反碼符號(hào)位不變數(shù)值位取反,補(bǔ)碼為反碼+1

?

? ③該知識(shí)為計(jì)算機(jī)組成原理中的相關(guān)知識(shí),原碼轉(zhuǎn)換為補(bǔ)碼總結(jié)為:

正數(shù)的原反補(bǔ)碼相同,負(fù)數(shù)符號(hào)位不變。

補(bǔ)碼為原碼從右邊數(shù)到第一個(gè)1位置不變,數(shù)值位往左到符號(hào)位后全部取反。

b:數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

? ①實(shí)例一

int main()
{
	//整型家族
	//10000000 00000000 00000000 00010100   原碼
	//11111111 11111111 11111111 11101100   補(bǔ)碼
	//ff ff ff ec
	unsigned int i = -20;
	
	//00000000 00000000 00000000 00001010   原碼
	//00000000 00000000 00000000 00001010   補(bǔ)碼
	//00 00 00 0a
	int j = 10;
	

	printf("%d\n", i + j);//%d打印的是有符號(hào)的數(shù)
	//i+j
	// 補(bǔ)碼相加
	//11111111 11111111 11111111 11101100   i
	//00000000 00000000 00000000 00001010   j
	//11111111 11111111 11111111 11110110   i+j補(bǔ)碼
	//10000000 00000000 00000000 00001010   i+j原碼
	//以有符號(hào)的形式打印就是補(bǔ)碼轉(zhuǎn)為原碼(數(shù)據(jù)在內(nèi)存中以補(bǔ)碼存儲(chǔ),打印有符號(hào)數(shù)值時(shí)轉(zhuǎn)為原碼)
	//結(jié)果-10

	printf("%u\n", i + j);//%u打印的是無(wú)符號(hào)的數(shù)
	//i+j
	// 補(bǔ)碼相加
	//11111111 11111111 11111111 11101100   i
	//00000000 00000000 00000000 00001010   j
	//11111111 11111111 11111111 11110110   i+j補(bǔ)碼
	//以無(wú)符號(hào)的形式打印就是直接打印補(bǔ)碼(首元素1不再表示符號(hào)位)
	//結(jié)果4294967286
    
    return 0;
}

②實(shí)例二

int main()
{
    //因?yàn)閕是無(wú)符號(hào)數(shù),所以在循環(huán)中一直是大于等于0,進(jìn)入死循環(huán)
    unsigned int i;
	for(i = 9; i >= 0; i--)
		printf("%u\n",i);
}

③實(shí)例三

int main()
{
    //10000000 00000000 00000000 00000001 原碼
	//11111111 11111111 11111111 11111111 補(bǔ)碼
	//char類(lèi)型只取1個(gè)字節(jié),內(nèi)存中存放ff(11111111)
    char a = -1;
	signed char b = -1;
	//a,b是有符號(hào)的char,%d輸出時(shí)會(huì)整型提升前面補(bǔ)符號(hào)位1
	//11111111 11111111 11111111 11111111
	//轉(zhuǎn)為原碼為10000000 00000000 00000000 00000001打印為-1

    unsigned char c = -1;
	//c是無(wú)符號(hào)char,整型提升前面補(bǔ)0
	//00000000 00000000 00000000 11111111無(wú)需轉(zhuǎn)為原碼直接打印255
	printf("%d %d %d\n", a, b, c);
    return 0;
}

a,b,c內(nèi)存中的存放

運(yùn)行結(jié)果

④實(shí)例四

int main()
{
    //128
	//00000000 00000000 00000000 10000000  原碼
	//00000000 00000000 00000000 10000000  補(bǔ)碼
	//存入內(nèi)存10000000
	char a = 128;

	//-128
	//10000000 00000000 00000000 10000000 原碼
	//11111111 11111111 11111111 10000000 補(bǔ)碼
	//存入內(nèi)存10000000
	char b = -128;

	//a整型提升為
	//11111111 11111111 11111111 10000000 補(bǔ)碼
	//10000000 00000000 00000000 10000000 轉(zhuǎn)為原碼
	//以%d輸出原碼
	//以%u直接輸出補(bǔ)碼
	//  
	//b整型提升為
	//11111111 11111111 11111111 10000000 補(bǔ)碼
	//10000000 00000000 00000000 10000000 轉(zhuǎn)為原碼
	//以%d輸出原碼
	//以%u直接輸出補(bǔ)碼
	printf("%d %d\n", a, b);
	printf("%u %u\n", a, b);

    return 0;
}

運(yùn)行結(jié)果

char類(lèi)型在內(nèi)存中的存儲(chǔ)范圍為-128~127,上圖中char類(lèi)型的128存入內(nèi)存中相當(dāng)于127+1=-128

⑤實(shí)例五

int main()
{ 
   char a[1000];
	int i;
	for (i = 0; i< 1000; i++)
	{
		a[i] = -1 - i;
		//有符號(hào)char類(lèi)型的取值范圍是 -128~127
		//-1 -2 -3 -4 ... -128 127 126 ... 1 0
		//128 + 127 = 255
	}
	printf("%d", strlen(a));//'\0'結(jié)束
    return 0;
}

運(yùn)行結(jié)果

四、浮點(diǎn)型家族在內(nèi)存中的存儲(chǔ) ? ? 1、IEEE的存儲(chǔ)規(guī)則

在講浮點(diǎn)型在內(nèi)存中的存儲(chǔ)前首先要了解什么是IEEE規(guī)則

IEEE 754 規(guī)定:

對(duì)于32位的單精度浮點(diǎn)數(shù),最高的1位是符號(hào)位S,接著的8位是指數(shù)E,剩下的23位為有效數(shù)字M。

對(duì)于64位的雙精度浮點(diǎn)數(shù),最高的1位是符號(hào)位S,接著的11位是指數(shù)E,剩下的52位為有效數(shù)字M。

如圖所示: ? ? 32位:

64位:

根據(jù)國(guó)際標(biāo)準(zhǔn)IEEE754,任意一個(gè)二進(jìn)制浮點(diǎn)數(shù)V可以表示成下面的形式:

(-1)^S * M * 2^E (-1)^S: 表示符號(hào)位,當(dāng) S=0 , V 為正數(shù);當(dāng) S=1 , V 為負(fù)數(shù)。 M: 表示有效數(shù)字,大于等于 1 ,小于 2 。 2^E: 表示指數(shù)位。
對(duì)于M來(lái)說(shuō):
IEEE 754 規(guī)定,在計(jì)算機(jī)內(nèi)部保存 M 時(shí),默認(rèn)這個(gè)數(shù)的第一位是1,因此可以被舍去,只保存后面的部分,比如保存1.625時(shí)只保存625,取出來(lái)時(shí),小數(shù)點(diǎn)前自動(dòng)補(bǔ)1。 這樣就可以節(jié)省一個(gè)比特位,增加精度。 以 32 位浮點(diǎn)數(shù)為例,留給M 只有 23位,將第一位的 1 舍去以后,等于可以保存 24 位有效數(shù)字,64位浮點(diǎn)數(shù)同樣如此。
對(duì)于E來(lái)說(shuō):
E是一個(gè)無(wú)符號(hào)的整數(shù) 如果 E 為 8 位,它的取值范圍為 0~255; 如果 E 為 11 位,它的取值范圍為 0~2047 。 但是,我們知道,科學(xué)計(jì)數(shù)法中的E 是可以出現(xiàn)負(fù)數(shù)的,所以IEEE754 規(guī)定,存入內(nèi)存時(shí) E 的真實(shí)值前必須再加上一個(gè)中間數(shù)。 對(duì)于 8 位的 E ,這個(gè)中間數(shù)是127 ; 對(duì)于 11 位的 E ,這個(gè)中間數(shù)是1023 。 比如, 2^13中 的 E 是 13 ,所以保存成 32 位浮點(diǎn)數(shù)時(shí),必須保存成 13+127=140 ,即 10001100 。
但同時(shí)我們要考慮到,浮點(diǎn)數(shù)無(wú)限接近于0或趨于無(wú)窮大的情況。
當(dāng)E為全0時(shí),即真實(shí)值為-127( 或者-1023),2^-127(或者 -1023)是一個(gè)無(wú)限接近于0的數(shù)。 當(dāng)E為全1時(shí),即真實(shí)值為128( 或者1024),2^128(或者 1024)是一個(gè)趨于無(wú)窮大的數(shù)。
2、浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)
int main()
{
    //浮點(diǎn)型家族
	//9
	//00000000 00000000 00000000 00001001 原碼反碼補(bǔ)碼相同
	int n = 9;
	float* pFloat = (float*)&n;
	//取原碼00000000 00000000 00000000 00001001
	//以%d打印為9
	printf("n的值為: %d\n",n);

	//00000000 00000000 00000000 00001001 *pFloat得到的是這個(gè),以%f的形式打印
	//0 00000000 00000000000000000001001
	//S = 0
	//E = 0(E為全0,是一個(gè)無(wú)限接近于0的數(shù))
	//M = 1.000..
    //(-1)^S * M * 2^E 
    //(-1)^0 * 1.000 * 2^(-127) 
	//打印為0.000000
	printf("*pFloat的值為: %f\n",*pFloat);

	//9.0放在float類(lèi)型中
	//9.0轉(zhuǎn)化為二進(jìn)制浮點(diǎn)數(shù)為
	//1001.0
	//轉(zhuǎn)為科學(xué)計(jì)數(shù)法
	//1.001*2^3 
	//(-1)^S * M * 2^E 
	//S = 0 
	//E = 3+127 = 130 二進(jìn)制為--->10000010
	//M = 00100000000000000000000
	//0 10000010 00100000000000000000000  IEE的存儲(chǔ)E規(guī)則
	//01000001 00010000 00000000 00000000 在內(nèi)存中的存儲(chǔ)
	*pFloat = 9.0; 

    //01000001 00010000 00000000 00000000 
	//以%d打印是一個(gè)非常大的正數(shù)
	printf("n 的值為: %d\n",n);

	//以%f打印將
	//01000001 00010000 00000000 00000000用IEEE的轉(zhuǎn)化規(guī)則轉(zhuǎn)為
	//0 10000010 00100000000000000000000
	//S = 0 
	//E = 10000010 --->130-127 = 3
	//M = 00100000000000000000000
	//(-1)^S * M * 2^E
	//(-1)^0 * 1.001 * 2^3 = 9.0
	printf("*pFloat的值為: %f\n",*pFloat);

	return 0;
}

運(yùn)行結(jié)果

五、總結(jié):

本章詳細(xì)講解了整型家族和浮點(diǎn)型家族數(shù)據(jù)類(lèi)型在內(nèi)存中的存儲(chǔ)方式,制作不易,希望對(duì)各位有幫助。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:C語(yǔ)言---數(shù)據(jù)的存儲(chǔ)-創(chuàng)新互聯(lián)
當(dāng)前URL:http://chinadenli.net/article16/hjedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站維護(hù)商城網(wǎng)站微信公眾號(hào)用戶(hù)體驗(yàn)網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)