最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言數(shù)據(jù)在內(nèi)存中的存儲流程深入分析

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

前言

C語言中有char、short、int、long、long long、float和doubole這些數(shù)據(jù)類型。這些數(shù)據(jù)類型也叫內(nèi)置類型。

所占存儲空間的大?。?/p>

數(shù)據(jù)類型所占存儲空間的大小
char1個字節(jié)
int4個字節(jié)
short4個字節(jié)
long4個字節(jié)
long long32位平臺下占4個字節(jié) ,64位平臺下占8個字節(jié)
float4個字節(jié)
double8個字節(jié)

類型的基本分類

整型

整型一共有char、int、short、long和long long這五種類型。

char類型的數(shù)據(jù)在內(nèi)存中存放的是ASCII碼值,是整型,所以也被當(dāng)成整型。

這些整型都分為有符號的整型和無符號的整型,具體可以看下面:

	int a = 5;
	signed int b;//有符號的整型
	unsigned int c;//無符號的整型

signed是有符號的,unsigned是無符號的。

平時我們定義變量時,一般都不會加前面,只是int 變量名 = 數(shù)據(jù),其實這就相當(dāng)于signed int 變量名 = 數(shù)據(jù)。

注意 \color{#FF0000}{注意} 注意 :但是char這個類型比較特殊,在C語言的標(biāo)準(zhǔn)中,沒有定義char到底是有符號的還是無符號的,取決于編譯器。

關(guān)于無符號和無符號:

前面我們說到了int類型在內(nèi)存中占4個字節(jié),1個字節(jié)就是8個bit。

比特位即bit,是計算機(jī)最小的存儲單位。以0或1來表示比特位的值(二進(jìn)制表示)。

10的二進(jìn)制序列就如圖所示,其中第一位是符號位,0代表正數(shù),1代表負(fù)數(shù)

浮點(diǎn)數(shù)

浮點(diǎn)數(shù)有float和double,一般用來表示小數(shù)。

float的表示精度低,存儲數(shù)值范圍較小。

double的表示精度高,存儲數(shù)值范圍較大。

自定義類型

自定義類型有數(shù)組類型、結(jié)構(gòu)體類型、枚舉、聯(lián)合體、指針類型和空類型(void)。在這就不一一詳細(xì)講了。

整型在內(nèi)存中的存儲

在了解整型在內(nèi)存中的存儲前,先了解一個計算機(jī)的原碼、反碼、補(bǔ)碼。

原碼、反碼、補(bǔ)碼

數(shù)值表示形式有:二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制。

整數(shù)的二進(jìn)制也有三種表達(dá)形式:原碼、反碼、補(bǔ)碼。

整數(shù)中:

正數(shù)的原碼反碼補(bǔ)碼相同

負(fù)數(shù)的原碼反碼補(bǔ)碼是需要計算的

  • 原碼:整數(shù)的二進(jìn)制序列(注意符號位)
  • 反碼:符號位不變,其它位按位取反就是反碼(0變1,1變0)
  • 補(bǔ)碼:反碼加1就是補(bǔ)碼

整型在內(nèi)存中存放的是補(bǔ)碼

接下來來驗證內(nèi)存中存放的是補(bǔ)碼:

我定義了一個a變量,值為-10. 原碼反碼和補(bǔ)碼也給大家了,因為正整數(shù)的原碼、反碼和補(bǔ)碼相同,所以不用正整數(shù)驗證。接下來讓我們來用編譯器來調(diào)試并監(jiān)視來觀察內(nèi)存,來看看整型在內(nèi)存中是如何存儲的。

看上圖,雖然這里面看到的是十六進(jìn)制,但不要認(rèn)為是以十六進(jìn)制存儲的,但本質(zhì)存的還是二進(jìn)制序列。由此我們可以得出內(nèi)存中存放的是補(bǔ)碼。

大端和小端

我們看到上圖a的地址和我們寫的十六進(jìn)制序列是反著的,為什么?這就是大小端的問題了。

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

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

如何判斷編譯器是大端還是小端

int main()
{
	int a = 1;
	if(*(char*)&a == 1)
	{
		printf("小端")
	}
	else
	{
		printf("大端")
	}
}

如果是小端存儲存儲的順序應(yīng)該是01 00 00 00 大端的話是00 00 00 01

我們對a進(jìn)行取地址,然后強(qiáng)轉(zhuǎn)成char類型的指針然后再進(jìn)行解引用,因為強(qiáng)制類型轉(zhuǎn)換了,所以只能訪問1個字節(jié)的地址,如果得到的1就是小端,0就是大端。

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

根據(jù)國際標(biāo)準(zhǔn)IEEE(電氣和電子工程協(xié)會)754,一個浮點(diǎn)數(shù) (Value) 的表示其實可以這樣表示:

也就是浮點(diǎn)數(shù)的實際值,等于符號位(sign bit)乘以指數(shù)偏移值(exponent bias)再乘以分?jǐn)?shù)值(fraction)。

簡單來說就是對于浮點(diǎn)數(shù)在內(nèi)存中的存儲,無論是float(32位浮點(diǎn)數(shù))還是double(64)位浮點(diǎn)數(shù)(S),都有符號位(Exp),指數(shù)位和有效數(shù)字位(Fraction)。

對于float這種32位浮點(diǎn)數(shù)來說,指數(shù)位占8個bite位,有效數(shù)字位占23個bite位

對于double這種64位浮點(diǎn)數(shù)來說,指數(shù)位占11個bite位,有效數(shù)字位占52個bite位

符號位都是占1個bite位。

其中因為浮點(diǎn)數(shù)的小數(shù)部分,用二進(jìn)制中難以存儲,就會存在精度不準(zhǔn)的問題。

單精和雙精浮點(diǎn)數(shù)的有效數(shù)字分別是有存儲的23和52個位,加上最左手邊沒有存儲的第1個位,即是24和53個位。

由以上的計算,單精和雙精浮點(diǎn)數(shù)可以保證7位和15位十進(jìn)制有效數(shù)字。

總結(jié)

對于數(shù)據(jù)在內(nèi)存中的存儲,大家還是要重點(diǎn)掌握原碼、反碼和補(bǔ)碼的,要會計算,然后是浮點(diǎn)數(shù)的存儲方式,可以把它當(dāng)成一個拓展知識來了解,拓展一下眼界,如果真要熟練掌握浮點(diǎn)數(shù)的存儲規(guī)則是要研究很多東西的,大家感興趣也可以去看一下國際標(biāo)準(zhǔn)IEEE754。

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

相關(guān)文章

  • Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例

    Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例

    驗證碼的原理基于人類視覺和計算機(jī)視覺的差異性,通過給用戶顯示一些難以被機(jī)器識別的圖形或文字,讓用戶進(jìn)行人機(jī)交互,確認(rèn)自己的身份,這樣可以有效保護(hù)網(wǎng)站安全,所以本給大家介紹了Qt實現(xiàn)驗證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下
    2024-01-01
  • 學(xué)生信息管理系統(tǒng)C語言版

    學(xué)生信息管理系統(tǒng)C語言版

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言文件操作詳情(二)

    C語言文件操作詳情(二)

    這篇文章主要介紹了C語言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開C語言文件操作的相關(guān)詳情,需要的小伙伴可以參考一下
    2022-04-04
  • C++如何實現(xiàn)簡易掃雷游戲

    C++如何實現(xiàn)簡易掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C++如何實現(xiàn)簡易掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 線程按指定順序輸出字符到數(shù)組的實例代碼

    線程按指定順序輸出字符到數(shù)組的實例代碼

    這篇文章主要介紹了線程按指定順序輸出字符到數(shù)組的實例代碼,需要的朋友可以參考下
    2014-02-02
  • QT實現(xiàn)單詞檢索軟件的示例代碼

    QT實現(xiàn)單詞檢索軟件的示例代碼

    本文主要介紹了QT實現(xiàn)單詞檢索軟件的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 深入理解C++中常見的關(guān)鍵字含義

    深入理解C++中常見的關(guān)鍵字含義

    本篇文章是對C++中常見關(guān)鍵字的含義進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言深入了解自定義數(shù)據(jù)類型的使用

    C語言深入了解自定義數(shù)據(jù)類型的使用

    這篇文章主要給大家介紹了關(guān)于C語言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C++實現(xiàn)LeetCode(14.最長共同前綴)

    C++實現(xiàn)LeetCode(14.最長共同前綴)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(14.最長共同前綴),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言之system函數(shù)案例詳解

    C語言之system函數(shù)案例詳解

    這篇文章主要介紹了C語言之system函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

岱山县| 西华县| 涿州市| 枞阳县| 大英县| 车致| 济宁市| 手游| 凭祥市| 中卫市| 南开区| 庆云县| 滨州市| 西青区| 永平县| 旺苍县| 宁河县| 子长县| 江口县| 大安市| 西丰县| 介休市| 汽车| 和平县| 万安县| 连江县| 宝应县| 万全县| 宜川县| 东丰县| 炎陵县| 集贤县| 易门县| 德令哈市| 恭城| 清新县| 江安县| 泰州市| 信宜市| 满洲里市| 军事|