国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

這篇具有很好參考價值的文章主要介紹了【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


鐵汁們,今天給大家分享一篇數(shù)組及詳解冒泡排序,來吧,開造??

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

類型的意義: 類型是用來創(chuàng)建變量, 變量的創(chuàng)建需要在內存中開辟一塊內存空間 ,用來存儲變量的值,類型的大小決定了開辟內存空間的大小 。

數(shù)據(jù)類型基本分類及其大小

基本內置類型:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	printf("%d\n", sizeof(int));              //結果為 4
	printf("%d\n", sizeof(short));           //結果為 2
	printf("%d\n", sizeof(char));            //結果為 1
	printf("%d\n", sizeof(long));           //結果為 4
	printf("%d\n", sizeof(long long));     //結果為 8
	printf("%d\n", sizeof(float));        //結果為 4
	printf("%d\n", sizeof(double));      //結果為 8
	return 0;
}

c語言標準只規(guī)定sizeof(long)只要大于等于sizeof(int)即可。

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
構造類型:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
指針類型:char* p、int* a、float* b等。

空類型:void,用于函數(shù)的返回值,函數(shù)參數(shù)、指針類型。

注意:void* p,空指針既不能進行解引用操作,也不能進行加減整數(shù)操作,若想要操作p所指向的值,則需要根據(jù)題意,進行強制類型轉換。

整形在內存中的存儲方式

原碼、反碼、補碼

整形值在計算機內存中有三種不同表示形式:原碼、反碼、補碼。三種表示形式均有一位符號位、其余為均為數(shù)值位。

符號位:0表示正數(shù)、1表示負數(shù);數(shù)值位:原、反、補碼均相同。

負整數(shù)二進制三種表示方式:

原碼:

將數(shù)值根據(jù)正負數(shù)的形式直接翻譯成二進制序列就得到原碼。

反碼:

將原碼符號位不變,其他位依次按位取反(二進制數(shù)位取反,將0變成1,1變成0)就得到反碼。

補碼:

反碼加一就得到補碼。

注意:正整數(shù)的原碼、反碼、補碼均相同。
例子:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

注意:用于計算或存放在內存中全為補碼,涉及該值打印時為原碼(需要把計算的值補碼->反碼->原碼)。

在計算機系統(tǒng)中,數(shù)值全部用補碼來計算和存儲,原因是補碼,可以將符號位和數(shù)值位統(tǒng)一處理,而cpu中只有加法器,需要將減法轉化為加法進行處理。

補碼與原碼相互轉化,其運算過程是相同的:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

大小端介紹

前提:以字節(jié)為單位,討論存儲順序。

大端字節(jié)序存儲

是指數(shù)據(jù)的低位存放在內存中高地址處,數(shù)據(jù)的高位放在內存中低地址處。

小端字節(jié)序存儲

是指數(shù)據(jù)的低位存放在內存中低地址處,數(shù)據(jù)的高位放在內存中高地址處。
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

大小端字節(jié)序由來:
在計算機內存中,我們是以字節(jié)為單位的,每個內存單元大小為一個字節(jié),一個字節(jié)對應著8個bit位,但在c語言中除了有8bit的char型,還有16bit位short型,還有32bit位int型,具體為多少要看具體的編譯器,不同編譯器所規(guī)定類型的大小不盡相同,對于位數(shù)大于8位的處理器,寄存器寬度大于1個字節(jié),必然存在如何將多字節(jié)數(shù)排序列的問題,從而引起了大小端的誕生。對于char類型數(shù)據(jù)無大小端存儲模式。

判斷一個系統(tǒng)是大端還是小端

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a;
	printf("%d\n", *p);
	return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

此處博主是用vs2019進行測試的,說明vs編譯器是采用小端字節(jié)序存儲方式進行存儲數(shù)據(jù)。
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

char與unsigned char值范圍與圖解

char為字節(jié),一個單位,8個bit位,有signed char、unsigned char這兩種類型。

char、signed char范圍:-128~127
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
unsiged char范圍:0~255
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

整形存儲相關練習題

擴展知識補充:整形提升

發(fā)生整形提升的條件:字節(jié)數(shù)小于int型,也就是char、short類型在參與計算時會發(fā)生整形提升,因為計算機計算時默認為Int型,4個字節(jié),參與運算。

注意一個數(shù)發(fā)生整形提升時:
a.首先看其自己的類型,若為char、short型,為有符號位,整形提升時看最高位.
b.其次看在打印時,看是以什么格式進行打印,%d是打印有符號位十進制整數(shù)(將該數(shù)看成有符號數(shù),補碼轉化為原碼在進行打印),%u是打印無符號十進制整數(shù)(將該數(shù)看成整數(shù),直接轉化為十進制進行打?。?。

題一、

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d,b=%d,c=%d", a, b, c);
	return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
圖解分析:

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
題二、

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char a = -128;
	printf("%u\n", a);
	return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
圖解分析:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
題三、

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	char a = 128;
	printf("%u\n", a);
	return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
圖解分析:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
題四、

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int i = -20;
	unsigned int j= 10;
	printf("%d\n", i + j);
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
圖解分析:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
題五、

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<Windows.h>
int main()
{
	unsigned int i;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
		Sleep(1000);
	}
	return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
題解分析:因為i的類型為unsigned int型,i為正數(shù),i的值>=0,for循環(huán)中的條件判斷恒為真。

浮點數(shù)在內存中的存儲方式

擴展知識:若想要觀察整形家族在內存中的值的范圍,整數(shù)表示的范圍,是在#include<limits.h>中定義,浮點數(shù)值的范圍是在#include<float.h>中定義。

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

浮點數(shù)存儲規(guī)則

根據(jù)國際標準IEEE(電氣和電子工程協(xié)會)754規(guī)定,任意一個二進制浮點數(shù)科學計數(shù)法變現(xiàn)形式為:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
IEEE 754規(guī)定:

對于32位的浮點數(shù)float型(單精度浮點數(shù)),最高1位為符號位S, 接著其后8位為指數(shù)E, 剩下的23位為有效數(shù)字位M。
對于64位的浮點數(shù)double型(雙精度浮點數(shù)),最高1位為符號位S, 接著其后11位為指數(shù)E, 剩下的52位為有效數(shù)字位M。

如圖所示:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
將浮點數(shù)存入內存中,IEEE 754對有效數(shù)字M和指數(shù)E的規(guī)定:

對于M:

由于1<=M<2,M可以寫成1.XXXXX形式,其中XXXXX表示小數(shù)部分,在計算機內部保存M時,因默認這個數(shù)的第一位總是1,因此可以被舍去,只保留XXXXX小數(shù)部分。

對于E:

E為一個無符號整數(shù),E為8位時,取值范圍為0到255,E為11位時,取值范圍為0到2047。
但在科學計數(shù)法中的E是可以為負數(shù)的,所以,IEEE754規(guī)定,存入內存時E的真實值必須加上個中間數(shù),對于8位的E,這個中間數(shù)為127,對于11位的E,這個中間數(shù)為1023(若某個數(shù)加上中間數(shù)大于E的取值范圍,則會越界,但由于IEEE 754的規(guī)定,一般不會出現(xiàn)某個數(shù)加上中間數(shù)大于E的取值范圍)。

例子圖解:
【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

將浮點數(shù)從內存中取出,IEEE 754對有效數(shù)字M和指數(shù)E的規(guī)定:

對于M:

把第一位的省略的1直接加上去,其后加個小數(shù)點,在其后加上存入內存中M部分,在特殊情況下M的取出與E也有關。

對于E:分類討論

a.E不全為0或不全為1:將存入內存中的E減去127或者1023,就可得到真實值;

b.E全為0:浮點數(shù)E等于1-127或者1-1023,即為真實值,此時,有效數(shù)字M不在加上第一位的1,而是還原成
0.XXXXX的小數(shù),
這樣做的目的是為了表示是0,以及接近1于0的很小數(shù)字。(127-127=E->1.XXx*2^-127約等于0)。

c.E全為1(255=127+128,1.01->*2^128趨向正無窮),此處博主不在展開敘述。

案列

int main()
{
 int n = 9;
 float *pFloat = (float *)&n;
 printf("n的值為:%d\n",n);
 printf("*pFloat的值為:%f\n",*pFloat);
 *pFloat = 9.0;
 printf("num的值為:%d\n",n);
 printf("*pFloat的值為:%f\n",*pFloat);
 return 0;
}

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲
解析:

a.以整數(shù)的形式放進內存中,在以整數(shù)的形式拿出來,結果才會為整形、以浮點數(shù)的形式放進內存中,在以浮點數(shù)的形式拿出來,結果才會為浮點數(shù)。

b.因為小數(shù)與整數(shù)在內存中的存儲方式不同:

以整數(shù)的形式放在內存中,將其轉化為二進制數(shù),在以浮點數(shù)的形式打印,則將該二進制數(shù)當作浮點數(shù)的二進制數(shù)表示形式,在按照浮點數(shù)從內存中取出的規(guī)則來進行計算。

以浮點數(shù)的形式放在內存中,將其轉化為浮點數(shù)二進制數(shù),在以整數(shù)的形式打印,則將該二進制數(shù)直接當作整數(shù)的二進制數(shù)表示形式,按照補碼->反碼->原碼,進行原碼的打印。

【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲

結語

鐵鐵們,深入挖掘數(shù)據(jù)在內存中存儲就到此結束啦,若博主有不好的地方,請指正,歡迎鐵鐵們留言,請動動你們的手給作者點個??鼓勵吧,你們的鼓勵就是我的動力?文章來源地址http://www.zghlxwxcb.cn/news/detail-481624.html

到了這里,關于【c語言進階】深入挖掘數(shù)據(jù)在內存中的存儲的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • c語言進階部分詳解(數(shù)據(jù)在內存中的存儲)

    c語言進階部分詳解(數(shù)據(jù)在內存中的存儲)

    大家好,今天要進行梳理的內容是數(shù)據(jù)在內存中的存儲相關內容。 在C語言中,數(shù)據(jù)在內存中的存儲是一個非常重要的概念。了解數(shù)據(jù)在內存中的存儲方式可以幫助我們更好地理解程序的執(zhí)行過程,優(yōu)化內存使用,提高程序的性能。 目錄 一.數(shù)據(jù)類型介紹 1.類型的基本歸類?

    2024年02月13日
    瀏覽(30)
  • 深入理解C語言(1):數(shù)據(jù)在內存中的存儲

    深入理解C語言(1):數(shù)據(jù)在內存中的存儲

    文章主題:數(shù)據(jù)在內存中的存儲?? 所屬專欄: 深入理解C語言 ?? 作者簡介:更新有關深入理解C語言知識的博主一枚,記錄分享自己對C語言的深入解讀。?? 個人主頁: [?]的個人主頁 ???? char(字符型) char unsigned char signed char short(短整型) short [int] unsigned short [int]

    2024年02月08日
    瀏覽(20)
  • C語言進階——數(shù)據(jù)在內存中的存儲,你知道嗎?

    C語言進階——數(shù)據(jù)在內存中的存儲,你知道嗎?

    之前我們涉及關于這一部分的知識只是大致的進行講解,今天我們要把這個內容詳細的講解和總結。 在前面我們已經(jīng)學習了基本的內置類型(內置類型就是語言自身定義的類型): char? ? ? ? ? ? ? ? //字符數(shù)據(jù)類型 short? ? ? ? ? ? ? ?//短整型 int? ? ? ? ? ? ? ? ?? //整形

    2024年02月02日
    瀏覽(21)
  • C進階:數(shù)據(jù)在內存中的存儲(1)

    C進階:數(shù)據(jù)在內存中的存儲(1)

    大家好,感謝大家最近的支持,今天也是開始了C進階一系列的博文的創(chuàng)作,歡迎大佬們來指點,歡迎來一起溝通?。?! 我們都知道:C語言具有以下幾種數(shù)據(jù)類型: 這里注意的是: sizeof(int) = sizeof(long), 在上述類型中,我們可以通過limits.h中的(MAX和MIN)獲得類型的的最大值

    2024年02月06日
    瀏覽(26)
  • C進階:數(shù)據(jù)在內存中的存儲(2)

    C進階:數(shù)據(jù)在內存中的存儲(2)

    在上一篇博文中,相信大家對于數(shù)據(jù)類型以及整數(shù)在內存中的存儲有了一定了解,那么,浮點數(shù)是怎么在內存中存儲的呢?下面來看一下我的講解。 浮點數(shù)家族: 包括:float,double,long double類型。與limits.h相似, 浮點數(shù)也有限制范圍的頭文件float.h. 與limits.h相似,float.h也包括

    2024年02月11日
    瀏覽(24)
  • 【C進階】深度剖析數(shù)據(jù)在內存中的存儲

    【C進階】深度剖析數(shù)據(jù)在內存中的存儲

    目錄 一、數(shù)據(jù)類型的介紹 1.類型的意義: 2.類型的基本分類 二、整形在內存中的存儲 1.原碼 反碼 補碼 2.大小端介紹 3.練習 三、浮點型在內存中的存儲 1.一個例子 ??2.浮點數(shù)存儲規(guī)則 前面我們已經(jīng)學習了基本的內置類型以及他們所占存儲空間的大?。?char? ? ? ? ? //字符

    2024年02月10日
    瀏覽(19)
  • 數(shù)據(jù)在內存中的存儲:深入了解與理解技巧

    數(shù)據(jù)在內存中的存儲:深入了解與理解技巧

    ? ?? 歡迎大家來到貝蒂大講堂?? ? ????養(yǎng)成好習慣,先贊后看哦~???? ? 所屬專欄:C語言學習 ? 貝蒂的主頁:Betty‘s blog ? 我們早就學完基本的數(shù)據(jù)類型,那這些數(shù)據(jù)類型到底在內存中怎么存儲的呢~,今天貝蒂就帶大家一起深入學習一下吧 1.1 整型 貝蒂說:“因

    2024年01月24日
    瀏覽(25)
  • 深入挖掘C語言 ----動態(tài)內存分配

    深入挖掘C語言 ----動態(tài)內存分配

    開篇備忘錄: \\\"自給自足的光, 永遠都不會暗\\\" 正文開始 C語言提供了一個動態(tài)開辟內存的函數(shù); 這個函數(shù)向內存申請一塊連續(xù)可用的空間, 并返回指向這塊空間的指針. 如果內存開辟成功, 則返回一個指向開辟好空間的指針 如果開辟失敗, 則返回一個NULL指針, 因此malloc的返回值一

    2024年04月28日
    瀏覽(33)
  • C語言數(shù)據(jù)在內存中的存儲

    C語言數(shù)據(jù)在內存中的存儲

    目錄 前言 本期內容介紹 一、數(shù)據(jù)類型的介紹 1.1類型的意義: 1.2C語言中是否有字符串類型? 1.3類型的基本歸類 整型家族: 浮點型(實型)家族: 構造(自定義)類型: 指針類型: 空類型: 二、整型在內存中的存儲 2.1原碼、反碼、補碼 總結: 2.2大小端字節(jié)序介紹 2.3什

    2024年02月16日
    瀏覽(21)
  • C語言:數(shù)據(jù)在內存中的存儲

    C語言:數(shù)據(jù)在內存中的存儲

    在講解操作符的時候,我們就講過了下?的內容: 整數(shù)的2進制表示方法有三種,即 原碼、反碼和補碼 三種表示方法均有 符號位 和 數(shù)值位 兩部分,符號位都是用0表示“正”,用1表示“負”,而數(shù)值位最高位的?位是被當做符號位,剩余的都是數(shù)值位。 正整數(shù)的原、反、

    2024年04月10日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包