国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【C語言進(jìn)階】??數(shù)據(jù)類型&&整型在內(nèi)存中的存儲(chǔ)

Xufc / 1293人閱讀

目錄

?

?一、數(shù)據(jù)類型介紹

二、類型的意義

三、類型的基本歸類

整型家族

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

構(gòu)造類型(自定義類型)

指針類型

空類型

四、整形在內(nèi)存中的存儲(chǔ)

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

大小端字節(jié)序

為什么有大端和小端?

一道經(jīng)典筆試題


?一、數(shù)據(jù)類型介紹

數(shù)據(jù)從大的方向分為兩類:

  1. 內(nèi)置類型
  2. 自定義類型

內(nèi)置類型我們前面已經(jīng)學(xué)習(xí)過,如下:

char? ? ? ? ? ? //字符數(shù)據(jù)類型
short? ? ? ? ? ?//短整型
int? ? ? ? ? ? ? ?//整形
long? ? ? ? ? ? //長整型
long long? ? ?//更長的整形
float? ? ? ? ? ? ?//單精度浮點(diǎn)數(shù)
double? ? ? ? ?//雙精度浮點(diǎn)數(shù)

二、類型的意義

  1. 使用這個(gè)類型開辟內(nèi)存空間的大小(大小決定了使用范圍)
  2. 如何看待內(nèi)存空間的視角

三、類型的基本歸類

整型家族

char
????????unsigned char
????????signed char
short
????????unsigned short [int]
????????signed short [int]
int
????????unsigned int
????????signed int
long
????????unsigned long [int]
????????signed long [int]

這里為什么把字符也歸進(jìn)了整型家族呢?

因?yàn)樽址诖鎯?chǔ)的時(shí)候存儲(chǔ)的是這個(gè)字符的ASCII碼值,char到底是signed char還是unsigned char這取決于編譯器,short,int, long都是有符號(hào)的

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

float
double

構(gòu)造類型(自定義類型)

?數(shù)組類型
?結(jié)構(gòu)體類型 struct
?枚舉類型 enum
?聯(lián)合類型 union

指針類型

int* ptr;
char* ps;
float* pc;
void* pd;

空類型

void 表示空類型(無類型)

通常應(yīng)用于函數(shù)的返回類型、函數(shù)的參數(shù)、指針類型

四、整形在內(nèi)存中的存儲(chǔ)

整型在內(nèi)存中究竟是如何存儲(chǔ)的呢?? 請看如下代碼:

int main(){	int a = 5;	int b = -1;}

我們可以在內(nèi)存中先看一下:

為什么會(huì)是這樣的結(jié)果

分析:

數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí)是存的二進(jìn)制?,VS編譯器為了方便展示,展示的是16進(jìn)制

a和b都是整型,占4個(gè)字節(jié),這里顯示的16進(jìn)制中,每2位是一個(gè)字節(jié)

可以再來看看下面的這段代碼:

int main(){	int a = 0x11223344;    //16進(jìn)制}

內(nèi)存:

可以看到a里面應(yīng)該是16進(jìn)制的11223344,結(jié)果內(nèi)存中顯示的卻是44332211,應(yīng)該是倒著存的?

那到底是怎么存的,我們需要搞懂原碼,反碼和補(bǔ)碼

三種表示方法均有符號(hào)位和數(shù)值位兩部分,符號(hào)位都是用0表示“正”,用1表示“負(fù)”,而數(shù)值位
三種表示方法各不相同。

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

原碼:

直接將一個(gè)數(shù)按照正負(fù)數(shù)的形式寫成二進(jìn)制

反碼:

原碼的符號(hào)位不變,其他位按位取反就可以得到了

補(bǔ)碼:

反碼+1就得到補(bǔ)碼

注意:正數(shù)的原碼,反碼,補(bǔ)碼相同

然后我們可以將-1的二進(jìn)制寫出來和內(nèi)存里面的對比一下

-1

原碼:10000000000000000000000000000001

反碼:11111111111111111111111111111110

補(bǔ)碼:11111111111111111111111111111111

將補(bǔ)碼寫成16進(jìn)制就是

FFFFFFFF

也就是內(nèi)存中看到的這樣

所以就知道了整數(shù)數(shù)據(jù)在內(nèi)存中存的是補(bǔ)碼?

在計(jì)算機(jī)系統(tǒng)中,數(shù)值一律用補(bǔ)碼來表示和存儲(chǔ)。原因在于,使用補(bǔ)碼,可以將符號(hào)位和數(shù)值域統(tǒng)一處理; 同時(shí),加法和減法也可以統(tǒng)一處理(CPU只有加法器)此外,補(bǔ)碼與原碼相互轉(zhuǎn)換,其運(yùn)算過程是相同的,不需要額外的硬件電路。

寫出5的補(bǔ)碼

0000 0000 0000 0000 0000 0000 0000 0101

16進(jìn)制形式

0 0 0 0 0 0 0 5

內(nèi)存中看到的:

?會(huì)發(fā)現(xiàn)將內(nèi)存中的數(shù)字倒著讀就是5的補(bǔ)碼的16進(jìn)制形式

那為什么在內(nèi)存中是倒著存的呢?? 這和大小端字節(jié)序有關(guān)

大小端字節(jié)序

如果我們要在內(nèi)存中存0x11223344

那就有多種存儲(chǔ)方式了

  1. 11223344? ? (正序)
  2. 44332211? ? (倒序)
  3. 其他

到了最后基本能用到的也就是兩種存儲(chǔ)模式

  1. 大端字節(jié)序存儲(chǔ)
  2. 小端字節(jié)序存儲(chǔ)

通過下面的圖來理解大端和小端

?存儲(chǔ)的時(shí)候以字節(jié)為單位來存儲(chǔ)

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

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

為什么有大端和小端?

為什么會(huì)有大小端模式之分呢?這是因?yàn)樵谟?jì)算機(jī)系統(tǒng)中,我們是以字節(jié)為單位的,每個(gè)地址單元都對應(yīng)著一個(gè)字節(jié),一個(gè)字節(jié)為8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數(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é)。對于大端模式,就將0x11 放在低地址中,即0x0010 中, 0x22 放在高地址中,即0x0011 中。小端模式,剛好相反。我們常用的X86 結(jié)構(gòu)是小端模式,而KEIL C51 則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬件來選擇是大端模式還是小端模式。

一道經(jīng)典筆試題

請簡述大端字節(jié)序和小端字節(jié)序的概念,設(shè)計(jì)一個(gè)小程序來判斷當(dāng)前機(jī)器的字節(jié)序

第一個(gè)小問題上面已經(jīng)說了,這里就不再啰嗦,主要來看看如何設(shè)計(jì)程序來判斷當(dāng)前機(jī)器的字節(jié)序

小端字節(jié)序是低位低地址,高位存儲(chǔ)在高地址處,根據(jù)這一特征我們就可以寫出來

比如1在內(nèi)存中的存儲(chǔ)如果是小端的話,就是01 00 00 00,我們可以只訪問它的第一個(gè)字節(jié)的空間拿到的如果是1,那就說明是小端存儲(chǔ)模式,是0的話那就是大端存儲(chǔ)模式。之前我們學(xué)指針的時(shí)候知道指針的類型決定了它可以訪問多大的空間,我們要訪問一個(gè)字節(jié),就可以用char*

如下代碼

#include int main(){	int a = 1;	char* p = (char*)&a;	if (*p == 1)	{		printf("小端字節(jié)序/n");	}	else	{		printf("大端字節(jié)序/n");	}	return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/121846.html

相關(guān)文章

  • C語言進(jìn)階】自定義類型(2)枚舉&聯(lián)合

    目錄 一、枚舉 (一)枚舉類型的定義 (二)使用枚舉的原因? (三)枚舉的優(yōu)點(diǎn)? (四)枚舉的大小 (五)枚舉的使用 二、聯(lián)合(共用體) (一)聯(lián)合類型的定義 (二)聯(lián)合的特點(diǎn) (三)面試題 (四)聯(lián)合大小的計(jì)算 一、枚舉 枚舉顧名思義就是:列舉?。? ?即把可能的取值一一列舉出來。 比如我們現(xiàn)實(shí)生活中: 一周當(dāng)中從周一至周日的7天,可以一一列舉;性別有:男、女、保密,可以一一列舉;月份有...

    leiyi 評論0 收藏0
  • Python中的基本數(shù)據(jù)類型介紹

      小編寫這篇文章的主要目的,主要是介紹關(guān)于Python的一些知識(shí),其中的內(nèi)容主要還是涉及到其基本的數(shù)據(jù)類型,那么,到底有多少種的數(shù)據(jù)類型呢?下面就給大家詳細(xì)解答下。  Python中主要有8種數(shù)據(jù)類型:number(數(shù)字)、string(字符串)、list(列表)、tuple(元組)、dict(字典)、set(集合)、Boolean(布爾值)、None(空值)。  其中Python有六個(gè)標(biāo)準(zhǔn)的數(shù)...

    89542767 評論0 收藏0
  • C語言進(jìn)階】字符串&內(nèi)存函數(shù)

    摘要:字符串常量適用于那些對它不做修改的字符串函數(shù)。同時(shí),語言提供了一系列庫函數(shù)來對操作字符串,這些庫函數(shù)都包含在頭文件中。目標(biāo)空間必須足夠大,以確保能存放源字符串。拷貝個(gè)字符從源字符串到目標(biāo)空間。 前言: ????????字符串是一種非常重要的數(shù)據(jù)類型,但是C語言不存在顯式的字符串類型,C...

    pingan8787 評論0 收藏0
  • python數(shù)學(xué)建模Numpy應(yīng)用介紹與Pandas學(xué)習(xí)

      小編寫這篇文章的主要目的,主要是來給大家解答下關(guān)于python數(shù)學(xué)建模的一些相關(guān)的介紹,涉及到內(nèi)容涵蓋Numpy的一些相關(guān)的應(yīng)用具體的一些介紹。另外,還會(huì)涉及到相關(guān)的Pandas學(xué)習(xí)知識(shí),具體內(nèi)容下面給大家詳細(xì)解答下。  1 Numpy介紹與應(yīng)用  1-1Numpy是什么  NumPy是一個(gè)運(yùn)行速度非常快的數(shù)學(xué)庫,一個(gè)開源的的python科學(xué)計(jì)算庫,主要用于數(shù)組、矩陣計(jì)算,包含:  一個(gè)強(qiáng)大的...

    89542767 評論0 收藏0
  • C語言實(shí)現(xiàn)簡易動(dòng)態(tài)電話簿&&文末提供源代碼下載

    摘要:導(dǎo)航前言功能函數(shù)結(jié)構(gòu)設(shè)定菜單交互主函數(shù)通訊錄初始化新增聯(lián)系人查找聯(lián)系人刪除聯(lián)系人修改聯(lián)系人查看所有聯(lián)系人清空所有聯(lián)系人以名字排序所有聯(lián)系人結(jié)尾語前言本文將實(shí)現(xiàn)一個(gè)簡易的電話簿管理。信息包括名字,性別,電話號(hào)碼,年齡,住址。 ...

    蘇丹 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<