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

C語言數(shù)據(jù)的存儲超詳細(xì)講解上篇

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

前言

本文開始學(xué)習(xí)C語言進(jìn)階的內(nèi)容了,進(jìn)階內(nèi)容,是在基礎(chǔ)階段的內(nèi)容上進(jìn)行拓展,有的知識點,在基礎(chǔ)階段也已經(jīng)學(xué)過。在進(jìn)階內(nèi)容中,將從更深層次的角度去理解學(xué)習(xí),本文主要內(nèi)容包括:

  • 數(shù)據(jù)類型詳細(xì)介紹
  • 整形在內(nèi)存中的存儲:原碼、反碼、補碼
  • 大小端字節(jié)序介紹及判斷
  • 浮點型在內(nèi)存中的存儲解析

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

在基礎(chǔ)階段已經(jīng)學(xué)習(xí)了基本的類型和存儲空間的大小。

知道了使用某個類型開辟內(nèi)存空間的大?。ù笮Q定了使用范圍)。

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

類型的基本歸類

整形家族

char
    unsigned char//無符號
    signed char//有符號
short
    unsigned short [int]//無符號
    signed short [int]//有符號
int
    unsigned int//無符號
    signed int//有符號
long
    unsigned long [int]//無符號
    signed long [int]//有符號

浮點數(shù)家族

float
double

構(gòu)造類型

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

指針類型

int *pi;
char *pc;
float* pf;
void* pv;

空類型

void 表示空類型(無類型)

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

2、整形在內(nèi)存中的存儲

一個變量的創(chuàng)建是要在內(nèi)存中開辟空間的??臻g的大小是根據(jù)變量的類型而決定的

//舉例
int a = 20;
int b = -10;

int 為整形,占用4個字節(jié),下面將具體分析變量 a 的數(shù)值20 在內(nèi)存空間中是如何分配的

2.1 原碼、反碼、補碼

計算機(jī)中的整數(shù)有三種表示方法,即原碼、反碼和補碼:

  • 原碼:直接將二進(jìn)制按照正負(fù)數(shù)的形式翻譯成二進(jìn)制就可以
  • **反碼:**將原碼的符號位不變,其他位依次按位取反就可以得到了
  • **補碼:**反碼+1就得到補碼

三種表示方法均有符號位和數(shù)值位兩部分:

  • 符號位都是用0表示“正”,用1表示“負(fù)”
  • 正整數(shù)數(shù)的原、反、補碼都相同
  • 負(fù)整數(shù)的三種表示方法各不相同

注意,整數(shù)存放在內(nèi)存中的是補碼,操作符的對象都是補碼,最后打印的是原碼。

舉例說明數(shù)值的原碼、反碼、補碼,

//
int main()
{
	int a = 10;//正數(shù)
	00000000 00000000 00000000 00001010 原碼
	00000000 00000000 00000000 00001010 反碼
	00000000 00000000 00000000 00001010 補碼
	a在內(nèi)存中的存儲形式 00 00 00 0a
	int b = -10;//負(fù)數(shù)
	10000000 00000000 00000000 00001010 原碼
	11111111 11111111 11111111 11110101 反碼
	11111111 11111111 11111111 11110110 補碼=反碼+1
	b在內(nèi)存中存儲的數(shù)值 ff ff ff f6
	return 0;
}

a的數(shù)值在內(nèi)存中的存儲形式:

在這里插入圖片描述

b的數(shù)值在內(nèi)存中的存儲形式:

在這里插入圖片描述

在計算機(jī)系統(tǒng)中,數(shù)值一律用補碼來表示和存儲。原因在于,使用補碼,可以將符號位和數(shù)值域統(tǒng)一處理;

由于CPU只有加法器,加法和減法也可以統(tǒng)一處理,此外,補碼與原碼相互轉(zhuǎn)換,其運算過程是相同的,不需要額外的硬件電路。

下面將舉例說明,數(shù)據(jù)在內(nèi)存中的操作是運用補碼而不是原碼的:

int main()使用補碼計算,打印的是原碼
{
	1-1//CPU只有加法器
	1+(-1)
	第一步:
	00000000 00000000 00000000 00000001  1補碼
	第二步:
	10000000 00000000 00000000 00000001  -1原碼
	11111111 11111111 11111111 11111110  -1反碼
	11111111 11111111 11111111 11111111  -1補碼
	第三步:補碼相加
	00000000 00000000 00000000 00000001  1補碼
	11111111 11111111 11111111 11111111  -1補碼
	結(jié)果是33位,超出范圍
   100000000 00000000 00000000 00000000 
	00000000 00000000 00000000 00000000   截斷32位為0

	如果使用原碼計算,結(jié)果是錯誤的
	00000000000000000000000000000001  1補碼
	10000000000000000000000000000001  -1原碼
	10000000000000000000000000000010  -2
}

2.2 大小端介紹

2.2.1 什么是大小端

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

2.2.2 大端和小端意義

  • 因為在計算機(jī)系統(tǒng)中,我們是以字節(jié)為單位的,每個地址單元都對應(yīng)著一個字節(jié),一個字節(jié)為8bit
  • 但是在C語言中除了8 bit的char之外,還有16 bit的short型,32 bit的long型(要看具體的編譯器)
  • 另外,對于位數(shù)大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節(jié),那么必然存在著一個如何將多個字節(jié)安排的問題。因此就導(dǎo)致了大端存儲模式和小端存儲模式

舉例說明大小端,例如:一個 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處理器還可以由硬件來選擇是大端模式還是小端模式。

int main()
{
	int a = 0x11223344;
	return 0;
}

低字節(jié)0x44擋在低地址中,因此是小端模式:

在這里插入圖片描述

在這里插入圖片描述

2.2.3 寫程序判斷字節(jié)序

設(shè)計一個小程序來判斷當(dāng)前機(jī)器的字節(jié)序

int checksys()
{
	int a = 1;//00 00 00 01
	char* ch = (char*)&a;//char* 截斷字節(jié),指針指向低地址數(shù)據(jù) 
	return *ch;//解引用,返回低地址數(shù)據(jù)
	//return *(char*)&a;//上面兩行代碼也可寫成一行代碼
}
int main()
{
	int a = checksys();
	if (a==1)//如果低地址保存的數(shù)據(jù)是1,即0x01,就是低字節(jié)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

在這里插入圖片描述

總結(jié)

數(shù)據(jù)的存儲的學(xué)習(xí)還沒有結(jié)束。

下一篇內(nèi)容繼續(xù)學(xué)習(xí)數(shù)據(jù)的存儲相關(guān)的知識點。

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

相關(guān)文章

  • C++中引用處理的基本方法

    C++中引用處理的基本方法

    引用不是新定義了一個變量,而是給已經(jīng)存在的變量取了一個別名,編譯器不會為引用變量開辟內(nèi)存空間,他和他引用的變量共用一塊內(nèi)存空間,下面這篇文章主要給大家介紹了關(guān)于C++中引用處理的基本方法,需要的朋友可以參考下
    2022-12-12
  • C語言中#pragma?pack(1)的用法與注意點

    C語言中#pragma?pack(1)的用法與注意點

    #pragma用于指示編譯器完成一些特定的動作,下面這篇文章主要給大家介紹了關(guān)于C語言中#pragma?pack(1)的用法與注意點的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Qt5升級到Qt6分步遷移教程小結(jié)

    Qt5升級到Qt6分步遷移教程小結(jié)

    Qt框架的一個新的長期支持版本6.5最近發(fā)布,本文主要介紹了Qt5升級到Qt6分步遷移教程小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • c++中strcpy函數(shù)在VS2015無法使用的問題

    c++中strcpy函數(shù)在VS2015無法使用的問題

    這篇文章主要介紹了c++中strcpy函數(shù)在VS2015無法使用的問題,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • C++實現(xiàn)LeetCode(347.前K個高頻元素)

    C++實現(xiàn)LeetCode(347.前K個高頻元素)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(347.前K個高頻元素),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解

    C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解

    vector 是表示可以改變大小的數(shù)組的序列容器,本文主要介紹了C++ STL標(biāo)準(zhǔn)庫std::vector的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)生成器

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)生成器

    有兩種應(yīng)用場景需要用到數(shù)據(jù)生成器,一種是需要測試數(shù)據(jù)庫性能,一種是隨機(jī)模擬生成一堆數(shù)據(jù),用來測試程序的性能。本文將利用Qt實現(xiàn)通用數(shù)據(jù)生成器,需要的可以參考一下
    2022-02-02
  • C++11 并發(fā)指南之Lock 詳解

    C++11 并發(fā)指南之Lock 詳解

    這篇文章主要介紹了C++11 并發(fā)指南之Lock 詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C語言中qsort函數(shù)用法實例小結(jié)

    C語言中qsort函數(shù)用法實例小結(jié)

    這篇文章主要介紹了C語言中qsort函數(shù)用法,包括了針對各種數(shù)據(jù)類型參數(shù)的排序,非常具有實用價值,需要的朋友可以參考下
    2014-09-09
  • C語言實現(xiàn)打飛機(jī)游戲

    C語言實現(xiàn)打飛機(jī)游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)打飛機(jī)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

阳山县| 林西县| 苏州市| 文成县| 新疆| 和平区| 花垣县| 曲靖市| 宣化县| 双辽市| 洛隆县| 河北区| 麻江县| 宝坻区| 湾仔区| 曲水县| 安顺市| 光山县| 利辛县| 伊金霍洛旗| 留坝县| 新龙县| 永嘉县| 雅安市| 连云港市| 翼城县| 宜城市| 买车| 定边县| 沽源县| 宜春市| 龙里县| 额尔古纳市| 固镇县| 英山县| 时尚| 兴文县| 绥化市| 马尔康县| 车致| 石首市|