欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中數(shù)據(jù)是如何存儲(chǔ)在內(nèi)存中的

 更新時(shí)間:2022年04月22日 10:19:42   作者:耀 星  
使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么

前言

在計(jì)算機(jī)內(nèi)存中,數(shù)據(jù)的存儲(chǔ)方式都是以0和1的形式存儲(chǔ),也就是二進(jìn)制的形式,數(shù)據(jù)是如何向內(nèi)存寫入的呢?整形數(shù)據(jù)以補(bǔ)碼的形式存儲(chǔ),浮點(diǎn)型的存儲(chǔ)規(guī)則較多,類似于科學(xué)計(jì)數(shù)法。

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

為什么需要有這些數(shù)據(jù)類型?

數(shù)據(jù)類型解決了數(shù)據(jù)存儲(chǔ)的問題。

‍整形數(shù)據(jù)在內(nèi)存中存儲(chǔ)

整數(shù)中有三種二進(jìn)制表示形式,分別是原碼、反碼、補(bǔ)碼,正整數(shù)的原碼 = 反碼 = 補(bǔ)碼,通常取最高位作為符號(hào)位。

原碼:直接將正負(fù)整數(shù)按照二進(jìn)制形式轉(zhuǎn)換即可。

15原碼:  (0) 1111 
-15原碼: (1) 1111
23原碼:  (0) 10111
-28原碼: (1) 11100
注意:()表示符號(hào)位,1表示負(fù),0表示正。

補(bǔ)碼:負(fù)整數(shù)的補(bǔ)碼將原碼的符號(hào)位不變,其它位依次取反。

15反碼:  (0) 1111 
-15反碼: (1) 0000
23反碼:  (0) 10111
-28反碼: (1) 00011

反碼:負(fù)整數(shù)的反碼在補(bǔ)碼的基礎(chǔ)上+1

15補(bǔ)碼:  (0) 1111 
-15補(bǔ)碼: (1) 0001
23補(bǔ)碼:  (0) 11000
-28補(bǔ)碼: (1) 00100

對(duì)于整形數(shù)據(jù)來說:數(shù)據(jù)存放的實(shí)際是存放補(bǔ)碼。

當(dāng)我們定義變量時(shí),系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,給變量開辟空間。這也是為什么要引入數(shù)據(jù)類型這個(gè)概念。

1.舉例:5是如何存儲(chǔ)到內(nèi)存中

5是一個(gè)整形常量,在C語言中寫一個(gè)整形常量,不超過int類型所能表示的范圍,以32位表示整形常量。

5的原碼碼 = 補(bǔ)碼 = 反碼

5原碼:00000000 00000000 00000000 00000101

5存入short類型的變量:取后16位

00000000 00000000 00000000 00000101

5存入int類型的變量:取32位

00000000 00000000 00000000 00000101

2.舉例:-10是如何存儲(chǔ)到內(nèi)存中的 

-10原碼:10000000 00000000 00000000 00001010

-10反碼:11111111 11111111 11111111 11110101

-10補(bǔ)碼:11111111 11111111 11111111 11110110

-10存入short類型:取后16位

11111111 11111111 11111111 11110110

-10存入int類型變量:取32位

11111111 11111111 11111111 11110110

 如何取出數(shù)據(jù)?

取出數(shù)據(jù)首先要知道數(shù)據(jù)的地址,得到地址后,如何確定取出范圍,由變量的數(shù)據(jù)類型來決定。

int main()
{
	/*
	a的原碼、反碼、補(bǔ)碼:00000000 10011000 10010110 1000000
	*/
	int a = 10000000;
	/*
	b是short*類型,解引用訪問時(shí),只有訪問兩個(gè)字節(jié)的權(quán)限
	*b拿出的數(shù)據(jù)是補(bǔ)碼: 10010110 10000000->原碼:11101001 10000000
	*/
	short* b = &a;
	printf("%d", *b);//-27008
	return 0;
}

為什么要使用補(bǔ)碼的形式存儲(chǔ)?

在計(jì)算機(jī)中CPU有中,只有加法器。以補(bǔ)碼形式存儲(chǔ),符號(hào)位參與運(yùn)算,既可以計(jì)算減法也可以計(jì)算加法。

大端存儲(chǔ)模式:指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址中。

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

 大小端主要由處理器決定,與編譯器,操作系統(tǒng)這些沒有直接的關(guān)系。

‍浮點(diǎn)型數(shù)據(jù)在內(nèi)存存儲(chǔ)

根據(jù)國際標(biāo)準(zhǔn)IEEE(電氣和電子工程協(xié)會(huì))754,任意一個(gè)二進(jìn)制浮點(diǎn)數(shù)V可以表示成下面的形式:

  • (-1)S*M*2^E
  • (-1)S表示符號(hào)位,當(dāng)S = 0,V為正數(shù);S = -1,V為負(fù)數(shù)
  • M表示有效數(shù)值,大于等于1,小于2
  • 2^E表示指數(shù)位 

類似于科學(xué)計(jì)數(shù)法:1090 = 1.090*10^3 

IEEE754規(guī)定單精度浮點(diǎn)型和雙精度浮點(diǎn)型存儲(chǔ)模型

IEEE 754對(duì)有效數(shù)字M和指數(shù)E,還有一些特別的規(guī)定。

1<=M<2,M可以寫成1.xxxxxx的形式,xxxxxx表示小數(shù)部分。

IEEE754規(guī)定,在計(jì)算機(jī)內(nèi)部保存M時(shí),默認(rèn)這個(gè)數(shù)的第一位總是1,因此可以舍去,只保存后面的xxxxxx部分。在讀取時(shí),再把第一位添上。節(jié)省一位有效數(shù)字.

對(duì)于指數(shù)E,情況比較多。

首先E為無符號(hào)整數(shù),如果E為八位,取值范圍時(shí)0~255,E為11位,取值范圍為0~2047,但是再科學(xué)計(jì)數(shù)法中E可以出現(xiàn)負(fù)數(shù),所以IEEE 754則規(guī)定,存入內(nèi)存E的真實(shí)數(shù)必須加上一個(gè)中間數(shù),對(duì)于八位的E,中間數(shù)為127,對(duì)于11位的E,中間數(shù)位1023。例如2^13的E是13,所以在保存E時(shí),必須保存成13+127 = 140,即10001100。

指數(shù)E從內(nèi)存中取出還可以分為3種情況

1.E不全為0或不全為1

這時(shí)浮點(diǎn)數(shù)就采用下面的規(guī)則表示,即指數(shù)E的計(jì)算值減去127(或1023),得到真實(shí)值,再將有效數(shù)字M前加上第一位的1。

比如:

0.5的二進(jìn)制位0.1,由于規(guī)定整數(shù)部分1<=M<2,即第一位必須位1,則將小數(shù)點(diǎn)右移一位,則為1.0*2^(-1),E的實(shí)際存儲(chǔ)位-1+127,E的實(shí)際存儲(chǔ)為01111110,M = 1.0,小數(shù)部分為0,M的存儲(chǔ)為23位00000000000000000000000。

則0.5的二進(jìn)制表示形式位:

0 01111110 00000000 00000000 0000000

2.E全為0

這時(shí),浮點(diǎn)數(shù)的指數(shù)E等于1-127(或者1-1023),即為真實(shí)值

有效數(shù)字M不再加上第一位的1,而是還原位0.xxxxxx的小數(shù),這樣可以表示0,以及接近于0的很小數(shù)字。

3.E全為1

如果有效數(shù)字M全位0,表示無窮大。

舉例:

10.0轉(zhuǎn)化為二進(jìn)制形式為1010.0,相當(dāng)于:1.010*2^3,按照標(biāo)準(zhǔn)格式 可得S = 0,M = 1.010,E = 3。

舉例1:7.25是如何存儲(chǔ)到內(nèi)存中的呢?

首先將7.25轉(zhuǎn)化為二進(jìn)制111.01

寫成標(biāo)準(zhǔn)形式:1.1101*2^2

S = 0,M = 1101,E = 2+127

0 10000001 11010000 00000000 0000000

驗(yàn)證: 

有誤的地方還請(qǐng)批評(píng)指正。 

到此這篇關(guān)于C語言中數(shù)據(jù)是如何存儲(chǔ)在內(nèi)存中的的文章就介紹到這了,更多相關(guān)C語言數(shù)據(jù)存儲(chǔ)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)ETW進(jìn)行進(jìn)程變動(dòng)監(jiān)控詳解

    C++實(shí)現(xiàn)ETW進(jìn)行進(jìn)程變動(dòng)監(jiān)控詳解

    ETW提供了一種對(duì)用戶層應(yīng)用程序和內(nèi)核層驅(qū)動(dòng)創(chuàng)建的事件對(duì)象的跟蹤記錄機(jī)制。為開發(fā)者提供了一套快速、可靠、通用的一系列事件跟蹤特性。本文將利用ETW進(jìn)行進(jìn)程變動(dòng)監(jiān)控,需要的可以參考一下
    2022-07-07
  • c++智能指針unique_ptr的使用

    c++智能指針unique_ptr的使用

    本文主要介紹了c++智能指針unique_ptr的使用,與shared_ptr作用類似,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++修煉之構(gòu)造函數(shù)與析構(gòu)函數(shù)

    C++修煉之構(gòu)造函數(shù)與析構(gòu)函數(shù)

    本章節(jié)我們將學(xué)習(xí)類的6個(gè)默認(rèn)成員函數(shù)中的構(gòu)造函數(shù)與析構(gòu)函數(shù),并對(duì)比C語言階段的內(nèi)容來學(xué)習(xí)它們的各自的特性,感興趣的同學(xué)可以參考閱讀
    2023-03-03
  • C++程序代碼優(yōu)化的方法實(shí)例大全

    C++程序代碼優(yōu)化的方法實(shí)例大全

    優(yōu)化是一個(gè)非常大的主題,本文并不是去深入探討性能分析理論,算法的效率,這篇文章主要給大家介紹了關(guān)于C++代碼優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++鍵盤記錄程序代碼

    C++鍵盤記錄程序代碼

    這篇文章主要介紹了C++鍵盤記錄程序代碼,是Windows應(yīng)用程序開發(fā)中非常實(shí)用的功能,該功能也常被一些遠(yuǎn)程操控程序所實(shí)用,需要的朋友可以參考下
    2014-10-10
  • makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn)

    這篇文章主要介紹了makefile如何調(diào)用靜態(tài)庫的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • c語言根據(jù)用戶輸入的出生年份并計(jì)算出當(dāng)前年齡

    c語言根據(jù)用戶輸入的出生年份并計(jì)算出當(dāng)前年齡

    這篇文章主要介紹了c語言根據(jù)用戶輸入的出生年份并計(jì)算出當(dāng)前年齡,需要的朋友可以參考下
    2023-03-03
  • Qt串口通信開發(fā)之QSerialPort模塊詳細(xì)使用方法與實(shí)例

    Qt串口通信開發(fā)之QSerialPort模塊詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了Qt串口通信開發(fā)之QSerialPort模塊詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • Opencv2.4.9函數(shù)HoughLinesP分析

    Opencv2.4.9函數(shù)HoughLinesP分析

    這篇文章主要為大家詳細(xì)介紹了Opencv2.4.9函數(shù)HoughLinesP,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)實(shí)例

    C++實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)實(shí)例

    本篇文章主要介紹了C++實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評(píng)論