一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C語言中數(shù)據(jù)的存儲詳解

C語言中數(shù)據(jù)的存儲詳解

2022-03-01 14:57云琤 C/C++

這篇文章主要為大家介紹了C語言中數(shù)據(jù)的存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助

數(shù)據(jù)的存儲首先就要說到數(shù)據(jù)的類型,類型決定了看待內存空間的視角。

C語言的數(shù)據(jù)類型分為內置類型和外置類型。

 

1.內置類型

(1)整型數(shù)組

char(字符型)、short(短整型)、int(整型)、long(長整型)(signed 或者 unsigned)

(2)浮點型

float(單精度浮點型)、double(雙精度浮點型)

 

2.自定義類型

(1)數(shù)組類型

此處需要注意的是,去掉數(shù)組名就是數(shù)組的類型

比如int arr[10],去掉數(shù)組名arr,int [10]就是數(shù)組數(shù)據(jù)類型

(2)結構體類型(struct)

(3)枚舉類型(enum)

(4)聯(lián)合類型(union)

C語言中數(shù)據(jù)的存儲詳解

 

3.指針類型

 

4.空類型(void)

數(shù)據(jù)的存儲形式就是以計算機的原碼反碼補碼進行存儲的

浮點型:不以原反補的形式進行存儲

其他的數(shù)字又分為有符號數(shù)和無符號數(shù)

無符號數(shù):無符號數(shù)的原反補三種碼是一致的,存儲的時候沒有區(qū)別

符號數(shù)來:正數(shù)的原反補碼是相同的,但是負數(shù)的原反補碼需要經過運算轉化(正數(shù)的最高位是0,負數(shù)的最高位是1)

原碼:將二進制按照正負數(shù)形式翻譯為二進制數(shù)字

反碼:將原碼的每一位取反

補碼:反碼+1

存儲的時候一般存儲數(shù)字的二進制序列補碼

同時數(shù)據(jù)的存儲存在大小端

內存空間具有編號,編號小的為低地址,編號大的為高地址

大端存儲:數(shù)據(jù)的低位保存在內存的高地址中

小端存儲:數(shù)據(jù)的低位保存在內存的低地址中

每個機器的存儲方式不同,可以用如下一段簡單代碼來觀察電腦是哪一種存儲方式

#include<stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a;
//此處將整型地址強制轉化為字符型
//強制轉化并不影響地址的存儲,只會影響讀取
//指針決定讀取內存的位數(shù),字符型指針在解引用時只解1字節(jié),整型指針在解引用時解4字節(jié)
//a存儲時,a是正數(shù),原反補相同
//00000000 00000000 00000000 00000001
//指針在強制轉化為字符型之后只能讀取該內存的前8位
//如果該指針解引用后結果是1,該數(shù)據(jù)存儲結果為00000001 00000000 00000000 00000000
//如果不是,該數(shù)據(jù)存儲結果為00000000 00000000 00000000 00000001
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

字符型

char/signed char 所對應的存儲區(qū)間為-128~127,同時規(guī)定10000000為-128。

為了理解signed與unsigned,適用如下例題

#include<stdio.h>
int main()
{
	unsigned int i;
	for (i = 9; i >= 0; i--)
//在這個循環(huán)開始之前就需要注意到,i需要小于0,該循環(huán)才會停止
//但是此時的i是一個unsigned類型,本身存儲的時候并沒有預留符號位,是沒有辦法破開循環(huán)的
//該循環(huán)是死循環(huán)
	{
		printf("%d", i);
	}
}

signed與unsigned的區(qū)別就在于能否表示正負數(shù)

在數(shù)據(jù)的存儲時,是否存在符號位

signed char與char類型的存儲也可以用一個圖來說明

C語言中數(shù)據(jù)的存儲詳解

中間的分界線即為正負分界線,第一位即為符號位。符號位為1是負數(shù),符號位為0即為正數(shù)

理解char的存儲范圍,借用如下例題

#include<stdio.h>
#include<string.h>
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a));
	return 0;
}
//i是int類型,可以隨著循環(huán)不斷增長,但是對于a這個數(shù)組來說,能存儲的數(shù)據(jù)有限。
//數(shù)組a是字符型,字符型數(shù)組能存儲的范圍就是-128~127之間,一共255個數(shù),所以數(shù)組長度也是255

運行結果:255

int等類型的存儲方式與char相似,這里就不在多做贅述

利用一個例子來證明浮點型存儲與整型存儲不同

#include<stdio.h>
int main()
{
	int n = 9;
	float* pfloat = (float*)&n;
	printf("n的值為:%d\n", n);
	printf("*pfloat的值為:%f\n", *pfloat);
//此處以單精度浮點型的指針取出存儲在整形中的數(shù)據(jù)

	*pfloat = 9.0;
	printf("n的值為:%d\n", n);
	printf("*pfloat的值為:%f\n", *pfloat);
//此處通過單精度浮點型的指針更改原本存儲在整型中的數(shù)字,并將其更改為單精度浮點型數(shù)字
	return 0;
}

輸出結果:

n的值為:9
*pfloat的值為:0.000000
n的值為:1091567616
*pfloat的值為:9.000000

由此可見,單精度浮點型的指針并不能成功取出原本存儲在整形中的數(shù)字,而第二步中通過單精度浮點型的指針所更改的整形的值,n也無法成功取用,所打出來的數(shù)字并不是9。由此可見二者的存儲方式是存在較大差異的,所以下面對浮點型的存儲方式進行講解。

浮點型

浮點型并不依靠數(shù)據(jù)的原反補碼進行存儲

浮點型有其特殊的規(guī)定

C語言中數(shù)據(jù)的存儲詳解

(E也可以理解為最高此項所對應的階次)

用實例來證明一下

比如8.5這個浮點數(shù)

轉化為二進制

1000.1

對于這個數(shù)而言,存儲成圖中形式就是

(-1)^0*1.0001*2^3

存儲就是

0 00000011 00000000000000000010001

此時假設我們所申請到的內存是一個條狀,那么對于浮點數(shù)而言的數(shù)據(jù)存儲方式如圖所示

C語言中數(shù)據(jù)的存儲詳解

 C語言中數(shù)據(jù)的存儲詳解

 單精度浮點型對應的就是圖一中所示,SME分布在不同的位置,圖二的所示為雙精度浮點型,雙精度與單精度浮點型所對應的E與M不同。

(一)

就是E的值,既不能全為0,也不能全為1,且E的存儲值與真實值不相同

為了表示極小的小數(shù),比如1*10^-10,因為E本身不具有符號位,所以不能表示負數(shù)

單精度:E=真實值+127

雙精度:E=真實值+1023

加完之后再轉化為二進制存儲為E,拿出來使用的時候再將這個數(shù)字減去

特殊情況1:E為全0

單精度的E此時的真實值為-127,該浮點數(shù)幾乎等于0,是一個幾乎不存在的數(shù)字

特殊情況2:E為全1

單精度的E此時的真實值為128,該浮點數(shù)是為正負無窮大的數(shù)字

(二)

對于M來說,M的值既然是在區(qū)間【1,2)之間,則位于整數(shù)部分的肯定為1

再次利用單精度浮點型存儲8.5

該數(shù)字的M為1.0001

為了能讓浮點數(shù)表達更大的數(shù)字,且M中處于個位的數(shù)字固定為1,之后就規(guī)定,M中個位的1可以不再進行存儲,等到取用的時候再進行添加。

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_63291917/article/details/121387085

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現(xiàn)電腦關機程序

    C語言實現(xiàn)電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數(shù)據(jù)都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
主站蜘蛛池模板: 太粗 好紧 使劲舒服 | 含羞草传媒每天免费一次破解 | 调教扩张宫颈女人惨叫 | 国产精品久久久久久久久久久久久久 | 日本h片在线 | 91大神亚洲影视在线 | 俺去也亚洲色图 | 欧美精品一二三区 | 操bb| coolgay男男gayxxx| 久久九九亚洲精品 | 2019自拍偷拍视频 | 久久婷婷五月综合色丁香 | 国产欧美又粗又猛又爽老 | 丝瓜视频在线观看污 | 日韩精品成人免费观看 | 91精品国产美女福到在线不卡 | 日本一区二区三区在线 观看网站 | 亚洲sss视频| 欧美色影视 | 国产精品免费看久久久香蕉 | 亚洲天堂网在线观看视频 | 国产高清自拍 | 亚洲精品久久久久69影院 | 亚洲精品91在线 | 亚洲免费在线观看视频 | 欧美贵妇vs高跟办公室 | 99热久久这里只精品国产www | 欧美老肥妇bbb| 日韩精品高清自在线 | 日韩一区在线播放 | 久久久久久免费高清电影 | 无码人妻精品一区二区蜜桃在线看 | 恩不要好大好硬好爽3p | 国产精品女同久久免费观看 | 国产第一福利视频导航在线 | 亚洲成在人线视频 | 四虎影视紧急入口地址大全 | 国产在线91 | jazz中国女人护士 | 精品久久久久久久久久香蕉 |