亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言數(shù)據(jù)的存儲專項分析

 更新時間:2022年07月08日 10:06:59   作者:hania_w  
使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內存位置。這意味著,當您創(chuàng)建一個變量時,就會在內存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內存和決定在保留內存中存儲什么

數(shù)據(jù)的類型介紹

類型的基本歸類

在寫數(shù)據(jù)類型的介紹之前,我們首先來簡單介紹下 release版本與debug版本之間的在內存上的區(qū)別:

我們先將下面的一段代碼在VS中運行一下,得到的結果是截然不同的

	int i = 0;
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hehe\n");
	}

將這段代碼在debug版本下得到的結果是 hehe死循環(huán),如下圖所示

從這里可以看到,hehe是在死循環(huán)的

將這段代碼在Release版本下得到的結果是 13個hehe

根本的原因是這兩個版本下,數(shù)據(jù)存儲的方式不同

以下是簡圖:

上面這張圖就展示了兩者的區(qū)別,當編譯器從低地址處往高地址處走時,debug環(huán)境下,arr數(shù)組結束時如果再繼續(xù)往下運行就會改變 i 的值,使 i的值初始化為0。release環(huán)境下arr數(shù)組結束時并不會改變i的值,因此并不會陷入死循環(huán)。

接著,回憶一下c語言中的數(shù)據(jù)基本類型:

1、整形家族有

char

注:字符類型的本質是ASCII碼值,是整形,因此劃分到整形家族。

unsigned char
signed char

short

unsigned short [int]
signed short [int]

int

unsigned int
signed int

long

unsigned long [int]
signed long [int]

除了char類型,其他類型的數(shù)據(jù)在沒有特定的說明下,默認是有符號類型。char類型取決于編譯器。

2、浮點數(shù)家族

float    精度低,存儲的數(shù)值范圍較小
double  精度高,存儲的數(shù)值范圍更大

3、構造類型(自定義類型,我們可以創(chuàng)建出新的類型)

數(shù)組類型
結構體類型  struct
枚舉類型  enum
聯(lián)合類型  union

4、指針類型

 int  *pi
 char  *pc
 float*  pf
 void*  pv

5、空類型

1、void 表示空類型(無類型)

2、通常應用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型 

看下面的代碼舉例

void test(void)
{
	//第一個 void 表示函數(shù)沒有返回值
	//第二個 void 表示函數(shù)不需要任何參數(shù)
	printf("hehe\n");
}
int main()
{
	test(1);
	return 0;
}

整形在內存中的存儲

源碼、反碼、補碼

計算機中的整數(shù)有三種表示方法,即原碼、反碼和補碼
三種表示方法均有符號位和數(shù)值位兩部分,符號位都是
用0表示“正”,用1表示“負”,而數(shù)值位負整數(shù)的三種
表示方法各不相同。

原碼:直接將二進制按照正負數(shù)的形式翻譯成二進 制就可以。

反碼:將原碼的符號位不變,其他位依次按位取反就可以得到了。

補碼:反碼+1就得到補碼。

正數(shù)的原碼、反碼、補碼都一樣,對于整形來說:數(shù)據(jù)存放內存中其實存放的是補碼

具體原因我們在此不多做解釋。

關于大小端的概念

什么是大小端?其實就是數(shù)據(jù)在內存中的存儲模式,大端存儲模式和小端存儲模式。

大端(存儲)模式:是指數(shù)據(jù)的低位保存在內存的高地址中,而數(shù)據(jù)的高位,保存在內存的低地址

中; 小端(存儲)模式:是指數(shù)據(jù)的低位保存在內存的低地址中,而數(shù)據(jù)的高位,,保存在內存的高地址中。

下面我們來看一道題目:判斷當前機器的存儲模式是大端存儲還是小端存儲。

#include <stdio.h>
	int check_sys()
	{
		int i = 1;
		return (*(char*)&i);
		//具體原因看下圖解釋
	}
	int main()
	{
		int ret = check_sys();
		if (ret == 1)
		{
			printf("小端\n");
		}
		else
		{
			printf("大端\n");
		}
		return 0;
	}

浮點型在內存中的存儲

(-1)^S * M * 2^E

(-1)^s表示符號位,當s=0,V為正數(shù);當s=1,V為負數(shù)。

M表示有效數(shù)字,大于等于1,小于2。

2^E表示指數(shù)位。

例如 V=5.0 :浮點數(shù)存儲為 101.0

如果我們想算出S、M、E,那么小數(shù)點前面就只能有一位

例: V=9.5=1001.1=1.0011*2^3

因此 S=0,M=1.0011,E=3

但是,凡是都有例外,因此,并不是所有的浮點數(shù)都可以用這種方式表示的

例如:V=9.6=1001.10…與1001.11之間徘徊,無法精確的表示出來

float —> 4byte —>32bit

double—>8byte—>64bit

雖然double類型比float類型的精確度要大,但是他們依舊有可能無法將小數(shù)的內存完整保存。

2、值得注意的是浮點數(shù)在內存中使用S、M、E的形式來存儲的

對于32位的浮點數(shù),最高的1位是符號位s,
接著的8位是指數(shù)E,剩下的23位為有效數(shù)字M。  

對于64位的浮點數(shù),最高的1位是符號位S,
接著的11位是指數(shù)E,剩下的52位為有效數(shù)字M 

3、指數(shù)E是一個復雜的數(shù)

首先 E 是一個無符號整數(shù)這意味著, 如果E為8位,它的取值范圍為0 ~ 255;如果E為11位,它的取值范圍為0~2047。 但是,我們知道,科學計數(shù)法中的E是可以出現(xiàn)負數(shù)的,所以,存入內存時E的真實值必須再加上一個中間數(shù),對于8位的E,這個中間數(shù)是 127;對于11位的E,這個中間數(shù)是1023。比如,2^10的E是10,所以保存成32位浮點數(shù)時,必須保存成10+127=137,即10001001。

如果有錯誤,希望大家評論或者私信指正!

到此這篇關于C語言數(shù)據(jù)的存儲專項分析的文章就介紹到這了,更多相關C語言數(shù)據(jù)存儲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • boost字符串處理函數(shù)format的用法

    boost字符串處理函數(shù)format的用法

    這篇文章介紹了boost字符串處理函數(shù)format的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 使用用C++做一顆會跳動的愛心實例代碼

    使用用C++做一顆會跳動的愛心實例代碼

    大家好,本篇文章主要講的是使用用C++做一顆會跳動的愛心實例代碼,感興趣的同學趕快來看一看吧,歡迎借鑒學習C++做一顆會跳動的愛心實例代碼
    2021-12-12
  • C語言strlen和sizeof在數(shù)組中的使用詳解

    C語言strlen和sizeof在數(shù)組中的使用詳解

    對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質區(qū)別
    2021-10-10
  • C++實現(xiàn)紅黑樹應用實例代碼

    C++實現(xiàn)紅黑樹應用實例代碼

    紅黑樹它一種特殊的二叉查找樹,這意味著它滿足二叉查找樹的特征,但是也有許多自己的特性,這篇文章主要給大家介紹了關于C++實現(xiàn)紅黑樹的相關資料,需要的朋友可以參考下
    2021-11-11
  • C語言實現(xiàn)堆的簡單操作的示例代碼

    C語言實現(xiàn)堆的簡單操作的示例代碼

    堆(heap)是計算機科學中一類特殊的數(shù)據(jù)結構的統(tǒng)稱。堆通常是一個可以被看做一棵樹的數(shù)組對象。本文介紹了C語言中堆的一些簡單操作,需要的可以參考一下
    2022-11-11
  • 用c語言實現(xiàn)一個電話薄(附完整代碼)

    用c語言實現(xiàn)一個電話薄(附完整代碼)

    大家好,本篇文章主要講的是用c語言實現(xiàn)一個電話薄(附完整代碼),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++中如何將數(shù)據(jù)保存為CSV文件

    C++中如何將數(shù)據(jù)保存為CSV文件

    這篇文章主要介紹了C++中如何將數(shù)據(jù)保存為CSV文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言實現(xiàn)隨機生成6位數(shù)密碼

    C語言實現(xiàn)隨機生成6位數(shù)密碼

    這篇文章主要為大家詳細介紹了如何使用C語言實現(xiàn)一個簡單而實用的隨機密碼生成器,該生成器將生成包含字母、數(shù)字和特殊字符的隨機密碼,有需要的小伙伴可以參考下
    2023-11-11
  • C++面經(jīng)之什么是RAII面試問題解析

    C++面經(jīng)之什么是RAII面試問題解析

    這篇文章主要介紹了C++面經(jīng)之什么是RAII面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C語言進度條的實現(xiàn)原理詳解

    C語言進度條的實現(xiàn)原理詳解

    這篇文章主要介紹了C語言進度條的實現(xiàn)原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08

最新評論