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

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ)

這篇具有很好參考價(jià)值的文章主要介紹了c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

系列文章目錄

文章目錄

  • 系列文章目錄
  • 前言

前言

目的:學(xué)習(xí)整數(shù)在內(nèi)存的儲(chǔ)存,什么是大小端,浮點(diǎn)數(shù)的儲(chǔ)存。

1. 整數(shù)在內(nèi)存中的存儲(chǔ)

在講解操作符的時(shí)候,我們就講過了下?的內(nèi)容:

整數(shù)的2進(jìn)制表??法有三種,即 原碼、反碼和補(bǔ)碼。

正整數(shù)的原、反、補(bǔ)碼都相同。
負(fù)整數(shù)的三種表??法各不相同。
原碼:直接將數(shù)值按照正負(fù)數(shù)的形式翻譯成?進(jìn)制得到的就是原碼。
反碼:將原碼的符號(hào)位不變,其他位依次按位取反就可以得到反碼。
補(bǔ)碼:反碼+1就得到補(bǔ)碼,補(bǔ)碼也可以取反+1得到源碼。
三種表??法均有符號(hào)位和數(shù)值位兩部分,符號(hào)位都是?0表?“正”,?1表?“負(fù)”,?數(shù)值位最
?位的?位是被當(dāng)做符號(hào)位,剩余的都是數(shù)值位。
c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言
數(shù)據(jù)存放內(nèi)存中其實(shí)存放的是補(bǔ)碼。 為什么呢?
在計(jì)算機(jī)系統(tǒng)中,數(shù)值?律?補(bǔ)碼來表?和存儲(chǔ)。
原因在于,使?補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)?處理;
同時(shí),加法和減法也可以統(tǒng)?處理(CPU只有加法器)此外,補(bǔ)碼與原碼相互轉(zhuǎn)換,其運(yùn)算過程是
相同的,不需要額外的硬件電路。

2. ??端字節(jié)序和字節(jié)序判斷

當(dāng)我們了解了整數(shù)在內(nèi)存中存儲(chǔ)后,我們調(diào)試看?個(gè)細(xì)節(jié):
?
#include <stdio.h>
int main()
{
 int a = 0x11223344;
 
 return 0;
}

調(diào)試一下,我們可以看到在a中的 0x11223344 這個(gè)數(shù)字是按照字節(jié)為單位,倒著存儲(chǔ)的。

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

2.1 什么是??端?

其實(shí)超過?個(gè)字節(jié)的數(shù)據(jù)在內(nèi)存中存儲(chǔ)的時(shí)候,就有存儲(chǔ)順序的問題,按照不同的存儲(chǔ)順序,我們分 為?端字節(jié)序存儲(chǔ)和?端字節(jié)序存儲(chǔ),下?是具體的概念:
1.?端(存儲(chǔ))模式:是指數(shù)據(jù)的低位字節(jié)內(nèi)容保存在內(nèi)存的?地址處,?數(shù)據(jù)的?位字節(jié)內(nèi)容,保存 在內(nèi)存的低地址處。
2.?端(存儲(chǔ))模式:是指數(shù)據(jù)的低位字節(jié)內(nèi)容保存在內(nèi)存的低地址處,?數(shù)據(jù)的?位字節(jié)內(nèi)容,保存 在內(nèi)存的?地址處。
上述概念需要記住,?便分辨??端。

?圖片展示一下:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

?2.2 為什么有??端?

這是因?yàn)樵谟?jì)算機(jī)系統(tǒng)中,我們是以字節(jié)為單位的,每個(gè)地址單元都對(duì)應(yīng)著?個(gè)字節(jié),?個(gè)字節(jié)為8 bit 位,但是在C語?中除了8 bit 的 char 之外,還有16 bit 的 short 型,32 bit 的 long 型(要看具體的編譯器),另外,對(duì)于位數(shù)?于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度? 于?個(gè)字節(jié),那么必然存在著?個(gè)如何將多個(gè)字節(jié)安排的問題。因此就導(dǎo)致了?端存儲(chǔ)模式和?端存 儲(chǔ)模式。
例如:?個(gè) 16bit short x ,在內(nèi)存中的地址為 0x0010 x 的值為 0x1122 ,那么
0x11 為?字節(jié), 0x22 為低字節(jié)。對(duì)于?端模式,就將 0x11 放在低地址中,即 0x0010 中,
0x22 放在?地址中,即 0x0011 中。?端模式,剛好相反。我們常?的 X86 結(jié)構(gòu)是?端模式,?
KEIL C51 則為?端模式。很多的ARM,DSP都為?端模式。有些ARM處理器還可以由硬件來選擇是 ?端模式還是?端模式。
所以說vs是小端字節(jié)序環(huán)境。
那么如何利用程序判斷是大端字節(jié)序還是小端字節(jié)序呢?
案例1:
//代碼1
#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;
}

分析:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

下面我們 來做一些有關(guān)數(shù)據(jù)的儲(chǔ)存的練習(xí):

案例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;
}

輸出結(jié)果:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

我們來一個(gè)一個(gè)分析:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

?b變量也是和a是一樣的

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

?案例2:

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

char的范圍-128~127,那這個(gè)案例輸出結(jié)果為:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

這是為什么呢?

分析如圖:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

在這里我們記住兩圖,記住就行:

signed char:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

?unsigned char:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

案例3:

#include <stdio.h>
int main()
{
     char a[1000];
     int i;
     for(i=0; i<1000; i++){
         a[i] = -1-i;
     }
     printf("%d",strlen(a));
     return 0;
}

在這里上面那幅圖就很重要了,輸出結(jié)果是:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

字符串長(zhǎng)度找到\0.也就是0

循環(huán)到255時(shí)在++,變成了0,所以是255.

案例4:

#include <stdio.h>
unsigned char i = 0;
int main()
{
     for(i = 0;i<=255;i++){
         printf("hello world\n");
     }
     return 0;
}

這個(gè)一看就是死循環(huán),unsigned char的值范圍0~255,所以會(huì)一直打印hello world。

案例5:

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

輸出結(jié)果:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

也是死循環(huán)為什么?因?yàn)閕 = -1時(shí),位無符號(hào)-1的無符號(hào)是一個(gè)很大的正數(shù),所以死循環(huán)。

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

常?的浮點(diǎn)數(shù):3.14159、1E10等,浮點(diǎn)數(shù)家族包括: float 、 double 、 long double 類型。
浮點(diǎn)數(shù)表?的范圍: float.h 中定義
根據(jù)國際標(biāo)準(zhǔn)IEEE(電?和電??程協(xié)會(huì)) 754,任意?個(gè)?進(jìn)制浮點(diǎn)數(shù)V可以表?成下?的形式:
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ù)字,M是?于等于1,?于2的
? 2^? E 表?指數(shù)位

?舉例來說:

?進(jìn)制的5.0,寫成?進(jìn)制是 101.0 ,相當(dāng)于 1.01×2^2 。
那么,按照上?V的格式,可以得出S=0,M=1.01,E=2。
?進(jìn)制的-5.0,寫成?進(jìn)制是 -101.0 ,相當(dāng)于 -1.01×2^2 。那么,S=1,M=1.01,E=2。
(1)對(duì)于32位的浮點(diǎn)數(shù),最?的1位存儲(chǔ)符號(hào)位S,接著的8位存儲(chǔ)指數(shù)E,剩下的23位存儲(chǔ)有效數(shù)字M
c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言
(2)對(duì)于64位的浮點(diǎn)數(shù),最?的1位存儲(chǔ)符號(hào)位S,接著的11位存儲(chǔ)指數(shù)E,剩下的52位存儲(chǔ)有效數(shù)字M
c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

3.1浮點(diǎn)數(shù)存數(shù)的過程

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

前?說過, 1 M<2 ,也就是說, M可以寫成 1.xxxxxx 的形式 ,其中 xxxxxx 表??數(shù)部分。 IEEE 754 規(guī)定,在計(jì)算機(jī)內(nèi)部保存M時(shí), 默認(rèn)這個(gè)數(shù)的第?位總是1,因此可以被舍去,只保存后?的 xxxxxx部分 。 ?如 保存1.01的時(shí)候,只保存01,等到讀取的時(shí)候,再把第?位的1加上去。這樣做的? 的,是節(jié)省1位有效數(shù)字。以32位浮點(diǎn)數(shù)為例,留給M只有23位,將第?位的1舍去以后,等于可以保 存24位有效數(shù)字。
?于指數(shù)E,情況就?較復(fù)雜
?先,E為?個(gè)?符號(hào)整數(shù)(unsigned int)
這意味著,如果E為8位,它的取值范圍為0~255;如果E為11位,它的取值范圍為0~2047。但是,我 們知道,科學(xué)計(jì)數(shù)法中的E是可以出現(xiàn)負(fù)數(shù)的,所以IEEE 754規(guī)定,存?內(nèi)存時(shí)E的真實(shí)值必須再加上 ?個(gè)中間數(shù),對(duì)于8位的E, 這個(gè)中間數(shù)是127 ;對(duì)于11位的E,這個(gè)中間數(shù)是1023。 ?如,2^10的E是 10,所以保存成32位浮點(diǎn)數(shù)時(shí),必須保存成10+127=137,即10001001.
案例1:
#include<stdio.h>
int main()
{
    float  a = 5.5f; 
    return 0;
}

那么浮點(diǎn)數(shù)是如何儲(chǔ)存進(jìn)儲(chǔ)存的呢?

不妨看看詳細(xì)分析:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

3.2浮點(diǎn)數(shù)取的過程?

指數(shù)E從內(nèi)存中取出還可以再分成三種情況:
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,即將?數(shù)點(diǎn)右移1位,則1.0*2^(-1),其 階碼為-1+127(中間值)=126,表?為01111110,?尾數(shù)1.0去掉整數(shù)部分為0,補(bǔ)?0到23位 00000000000000000000000,則其?進(jìn)制表?形式為
0? ? 01111110? ? 00000000000000000000000
E全為0
這時(shí),浮點(diǎn)數(shù)的指數(shù)E等于 1 -127(或者1-1023)即為真實(shí)值, 有效數(shù)字M不再加上第?位的1 ,?是還 原為0.xxxxxx的?數(shù)。這樣做是為了表?±0,以及接近于0的很?的數(shù)字。
0? ?00000000? ?00100000000000000000000
E全為1
這時(shí),如果有效數(shù)字M全為0,表?±?窮?(正負(fù)取決于符號(hào)位s)
0? ?11111111? ?00010000000000000000000
好了,關(guān)于浮點(diǎn)數(shù)的表?規(guī)則,就說到這?。
來看一道練習(xí)案例1:
#include <stdio.h>
int main()
{
     int n = 9;
     float *pFloat = (float *)&n;
     printf("n的值為:%d\n",n);
     printf("*pFloat的值為:%f\n",*pFloat);
     *pFloat = 9.0;
     printf("n的值為:%d\n",n);
     printf("*pFloat的值為:%f\n",*pFloat);
     return 0;
}

輸出結(jié)果:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

這是為什么呢?來一個(gè)一個(gè)分析:

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ),C語言,c語言,開發(fā)語言

?所以不要把浮點(diǎn)數(shù)和正數(shù)打印錯(cuò)了。

好了,今天就到這里了,都看到這里了,點(diǎn)一個(gè)贊吧,謝謝觀看。文章來源地址http://www.zghlxwxcb.cn/news/detail-757848.html

到了這里,關(guān)于c-語言->數(shù)據(jù)在內(nèi)存的存儲(chǔ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C語言】數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

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

    什么叫做浮點(diǎn)數(shù),就是有小數(shù)的數(shù)據(jù)就要浮點(diǎn)數(shù),比如:5.5 6.5 9.0等一些數(shù)據(jù)就叫浮點(diǎn)數(shù),那么浮點(diǎn)數(shù)又是怎么在內(nèi)存中存放的呢,下面聽我一一道來。 浮點(diǎn)型的家族包括:float double long double 我們以以下代碼為例比較下浮點(diǎn)數(shù)和整型數(shù)據(jù)內(nèi)存中的存儲(chǔ)是如何的: 打印的結(jié)果

    2024年02月07日
    瀏覽(20)
  • C語言——數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

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

    本章重點(diǎn) 1. 數(shù)據(jù)類型詳細(xì)介紹 2. 整形在內(nèi)存中的存儲(chǔ):原碼、反碼、補(bǔ)碼 3. 大小端字節(jié)序介紹及判斷 4. 浮點(diǎn)型在內(nèi)存中的存儲(chǔ)解析 目錄 1. 數(shù)據(jù)類型介紹 1.1 類型的基本歸類 2. 整形在內(nèi)存中的存儲(chǔ) 2.1 原碼、反碼、補(bǔ)碼 2.2 大小端介紹 2.3 練習(xí) 2.4 unsigned char 和 signed char的區(qū)別

    2024年02月08日
    瀏覽(34)
  • C語言:數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

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

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

    2024年04月10日
    瀏覽(33)
  • 數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(C語言)

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

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

    2024年02月02日
    瀏覽(18)
  • 【C語言】數(shù)據(jù)在內(nèi)存中的存儲(chǔ)詳解

    【C語言】數(shù)據(jù)在內(nèi)存中的存儲(chǔ)詳解

    我們可以把數(shù)據(jù)類型想象為一個(gè)矩形盒子,int、char 等類型 分別為不同的盒子 可以放著不同大小的東西(數(shù)據(jù))(即所占存儲(chǔ)空間的大?。?類型的的意義: 使用這個(gè)類型開辟內(nèi)存空間的大小(大小決定了使用范圍) 如何看待內(nèi)存空間的視角。 注意 : 字符在內(nèi)存中存儲(chǔ)的是

    2024年02月13日
    瀏覽(30)
  • 【C語言】數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(一)

    【C語言】數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(一)

    內(nèi)置類型: 所占空間的大小: 類型的意義: 使用這個(gè)類型開辟空間的大小,決定只能使用的范圍。 整型家族: 浮點(diǎn)型家族: 構(gòu)造類型: 指針類型: 空類型: void表示空類型 通常用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型。 變量創(chuàng)建是要在內(nèi)存開辟空間的,空間的大小

    2024年02月10日
    瀏覽(26)
  • 『C語言』數(shù)據(jù)在內(nèi)存中的存儲(chǔ)規(guī)則

    『C語言』數(shù)據(jù)在內(nèi)存中的存儲(chǔ)規(guī)則

    ?? 博客主頁 : 小羊失眠啦. ?? 系列專欄 : C語言 ??? 每日語錄 : 精誠所至,金石為開。 ?? 感謝大家點(diǎn)贊??收藏?評(píng)論?? 前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。 小羊近期已經(jīng)將C語言初階學(xué)習(xí)

    2024年02月12日
    瀏覽(24)
  • 整形數(shù)據(jù)在內(nèi)存中的存儲(chǔ)(C語言)

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

    1.整形家族 2.(原碼、反碼、補(bǔ)碼)基礎(chǔ)知識(shí) 計(jì)算機(jī)中的整數(shù)有三種2進(jìn)制表示方法,即原碼、反碼和補(bǔ)碼。 三種表示方法均有符號(hào)位和數(shù)值位兩部分,符號(hào)位都是用0表示“正”,用1表示“負(fù)”。 正數(shù)的原、反、補(bǔ)碼都相同。 負(fù)整數(shù)的三種表示方法各不相同。 原碼 直接將數(shù)值

    2024年01月25日
    瀏覽(19)
  • 【C語言】詳解數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

    【C語言】詳解數(shù)據(jù)在內(nèi)存中的存儲(chǔ)

    計(jì)算機(jī)能夠處理的是二進(jìn)制的數(shù)據(jù), 整形和浮點(diǎn)型數(shù)據(jù)在內(nèi)存中也都是以二進(jìn)制的形式存儲(chǔ)的。 整數(shù)2進(jìn)制表示方法,即原、反、補(bǔ)碼,三種均有 符號(hào)位 和 數(shù)值位 倆部分,符號(hào)位用0表示 正 ,1表示 負(fù) 。 正 的整數(shù):原、反、補(bǔ)碼相同。 負(fù) 的整數(shù):原、反、補(bǔ)碼要進(jìn)行計(jì)

    2024年02月08日
    瀏覽(25)
  • C語言:數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式

    C語言:數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式

    關(guān)于整數(shù)在內(nèi)存中的存儲(chǔ)形式,在博主之前寫的文章里已經(jīng)介紹了!友友們可以去點(diǎn)下面鏈接去看,這里就不過多介紹。 C語言:進(jìn)制的轉(zhuǎn)換以及原碼、反碼、補(bǔ)碼 我們以整型在內(nèi)存中的存儲(chǔ)形式為基礎(chǔ),探究后面的內(nèi)容:整型提升與截?cái)?、算?shù)轉(zhuǎn)換、大小端字節(jié)序和字節(jié)序

    2024年01月23日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包