系列文章目錄
文章目錄
- 系列文章目錄
- 前言
前言
目的:學(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得到源碼。

在計(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é)序判斷
#include <stdio.h>
int main()
{
int a = 0x11223344;
return 0;
}
調(diào)試一下,我們可以看到在a中的 0x11223344 這個(gè)數(shù)字是按照字節(jié)為單位,倒著存儲(chǔ)的。
2.1 什么是??端?
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)存的?地址處。上述概念需要記住,?便分辨??端。
?圖片展示一下:
?2.2 為什么有??端?
//代碼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;
}
分析:
下面我們 來做一些有關(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é)果:
我們來一個(gè)一個(gè)分析:
?b變量也是和a是一樣的
?案例2:
#include <stdio.h>
int main()
{
char a = -128;
printf("%u\n",a);
return 0;
}
char的范圍-128~127,那這個(gè)案例輸出結(jié)果為:
這是為什么呢?
分析如圖:
在這里我們記住兩圖,記住就行:
signed char:
?unsigned char:
案例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é)果是:
字符串長(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é)果:
也是死循環(huán)為什么?因?yàn)閕 = -1時(shí),位無符號(hào)-1的無符號(hào)是一個(gè)很大的正數(shù),所以死循環(huán)。
3. 浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)
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ù)位
?舉例來說:


3.1浮點(diǎn)數(shù)存數(shù)的過程
IEEE 754 對(duì)有效數(shù)字M和指數(shù)E,還有?些特別規(guī)定:
#include<stdio.h>
int main()
{
float a = 5.5f;
return 0;
}
那么浮點(diǎn)數(shù)是如何儲(chǔ)存進(jìn)儲(chǔ)存的呢?
不妨看看詳細(xì)分析:
3.2浮點(diǎn)數(shù)取的過程?
#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é)果:
這是為什么呢?來一個(gè)一個(gè)分析:
?所以不要把浮點(diǎn)數(shù)和正數(shù)打印錯(cuò)了。文章來源:http://www.zghlxwxcb.cn/news/detail-757848.html
好了,今天就到這里了,都看到這里了,點(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)!