iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中数据的存储详解
  • 815
分享到

C语言中数据的存储详解

2024-04-02 19:04:59 815人浏览 泡泡鱼
摘要

目录1.内置类型(1)整型数组(2)浮点型2.自定义类型3.指针类型4.空类型(void)字符型浮点型(一)(二)总结 数据的存储首先就要说到数据的类型,类型决定了看待内存空间的视角

数据的存储首先就要说到数据的类型,类型决定了看待内存空间的视角。

C语言的数据类型分为内置类型和外置类型

1.内置类型

(1)整型数组

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

(2)浮点型

float(单精度浮点型)、double(双精度浮点型)

2.自定义类型

(1)数组类型

此处需要注意的是,去掉数组名就是数组的类型

比如int arr[10],去掉数组名arr,int [10]就是数组数据类型

(2)结构体类型(struct

(3)枚举类型(enum

(4)联合类型(uNIOn

3.指针类型

4.空类型(void)

数据的存储形式就是以计算机的原码反码补码进行存储的

浮点型:不以原反补的形式进行存储

其他的数字又分为有符号数和无符号数

无符号数:无符号数的原反补三种码是一致的,存储的时候没有区别

符号数来:正数的原反补码是相同的,但是负数的原反补码需要经过运算转化(正数的最高位是0,负数的最高位是1)

原码:将二进制按照正负数形式翻译为二进制数字

反码:将原码的每一位取反

补码:反码+1

存储的时候一般存储数字的二进制序列补码

同时数据的存储存在大小端

内存空间具有编号,编号小的为低地址,编号大的为高地址

大端存储:数据的低位保存在内存的高地址中

小端存储:数据的低位保存在内存的低地址中

每个机器的存储方式不同,可以用如下一段简单代码来观察电脑是哪一种存储方式


#include<stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a;
//此处将整型地址强制转化为字符型
//强制转化并不影响地址的存储,只会影响读取
//指针决定读取内存的位数,字符型指针在解引用时只解1字节,整型指针在解引用时解4字节
//a存储时,a是正数,原反补相同
//00000000 00000000 00000000 00000001
//指针在强制转化为字符型之后只能读取该内存的前8位
//如果该指针解引用后结果是1,该数据存储结果为00000001 00000000 00000000 00000000
//如果不是,该数据存储结果为00000000 00000000 00000000 00000001
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

字符型

char/signed char 所对应的存储区间为-128~127,同时规定10000000为-128。

为了理解signed与unsigned,适用如下例题


#include<stdio.h>
int main()
{
	unsigned int i;
	for (i = 9; i >= 0; i--)
//在这个循环开始之前就需要注意到,i需要小于0,该循环才会停止
//但是此时的i是一个unsigned类型,本身存储的时候并没有预留符号位,是没有办法破开循环的
//该循环是死循环
	{
		printf("%d", i);
	}
}

signedunsigned的区别就在于能否表示正负数

在数据的存储时,是否存在符号位

signed char与char类型的存储也可以用一个图来说明

中间的分界线即为正负分界线,第一位即为符号位。符号位为1是负数,符号位为0即为正数

理解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类型,可以随着循环不断增长,但是对于a这个数组来说,能存储的数据有限。
//数组a是字符型,字符型数组能存储的范围就是-128~127之间,一共255个数,所以数组长度也是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);
//此处以单精度浮点型的指针取出存储在整形中的数据
 
	*pfloat = 9.0;
	printf("n的值为:%d\n", n);
	printf("*pfloat的值为:%f\n", *pfloat);
//此处通过单精度浮点型的指针更改原本存储在整型中的数字,并将其更改为单精度浮点型数字
	return 0;
}

输出结果:

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

由此可见,单精度浮点型的指针并不能成功取出原本存储在整形中的数字,而第二步中通过单精度浮点型的指针所更改的整形的值,n也无法成功取用,所打出来的数字并不是9。由此可见二者的存储方式是存在较大差异的,所以下面对浮点型的存储方式进行讲解。

浮点型

浮点型并不依靠数据的原反补码进行存储

浮点型有其特殊的规定

(E也可以理解为最高此项所对应的阶次)

用实例来证明一下

比如8.5这个浮点数

转化为二进制

1000.1

对于这个数而言,存储成图中形式就是

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

存储就是

0 00000011 00000000000000000010001

此时假设我们所申请到的内存是一个条状,那么对于浮点数而言的数据存储方式如图所示

 

 单精度浮点型对应的就是图一中所示,SME分布在不同的位置,图二的所示为双精度浮点型,双精度与单精度浮点型所对应的E与M不同。

(一)

就是E的值,既不能全为0,也不能全为1,且E的存储值与真实值不相同

为了表示极小的小数,比如1*10^-10,因为E本身不具有符号位,所以不能表示负数

单精度:E=真实值+127

双精度:E=真实值+1023

加完之后再转化为二进制存储为E,拿出来使用的时候再将这个数字减去

特殊情况1:E为全0

单精度的E此时的真实值为-127,该浮点数几乎等于0,是一个几乎不存在的数字

特殊情况2:E为全1

单精度的E此时的真实值为128,该浮点数是为正负无穷大的数字

(二)

对于M来说,M的值既然是在区间【1,2)之间,则位于整数部分的肯定为1

再次利用单精度浮点型存储8.5

该数字的M为1.0001

为了能让浮点数表达更大的数字,且M中处于个位的数字固定为1,之后就规定,M中个位的1可以不再进行存储,等到取用的时候再进行添加。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言中数据的存储详解

本文链接: https://www.lsjlt.com/news/157996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解C语言中数据的存储
    目录一、类型归类1、整形家族2、浮点型家族3、指针类型4、空类型二、类型的意义 三、数据在类型中存储(以整形和浮点型为例子)1. 关于 存储的基本概念2.存储模式四.应用1.2.对...
    99+
    2024-04-02
  • C语言中数据的存储详解
    目录1.内置类型(1)整型数组(2)浮点型2.自定义类型3.指针类型4.空类型(void)字符型浮点型(一)(二)总结 数据的存储首先就要说到数据的类型,类型决定了看待内存空间的视角...
    99+
    2024-04-02
  • C语言数据存储详解
    目录一、数据类型二、整型在内存中的存储1.原码、反码、补码大小端介绍三、浮点型在内存中的存储1.举一个浮点数存储的例子: 2.浮点数存储规则: 总结一、数据类型 char:字符数字类...
    99+
    2024-04-02
  • C语言数据的存储详解
    目录数据类型的介绍整形浮点型构造类型指针类型void空类型整数在内存中的存储原反补的介绍大小端的介绍面试例题练习浮点数在内存中的存储存储规则讲解举例IEEE754的特别规定案例flo...
    99+
    2024-04-02
  • C语言数据在内存中的存储详解
    目录文章摘要一、C语言的数据类型数据类型基本分为: 二、隐式类型转换1.什么是隐式类型转换2.整型提升 3.类型转换三、机器大小端1.什么是大小端2.大小端在截断的应用3....
    99+
    2024-04-02
  • C语言编程数据在内存中的存储详解
    目录变量在计算机中有三种表示方式,原码反码,补码原码反码补码总结一下浮点数在内存的储存C语言中,有几种基本内置类型。 int unsigned int signed int cha...
    99+
    2024-04-02
  • 关于C语言中数据在内存中的存储详解
    目录前言一、数据类型介绍1.类型的基本归类1.整形家族2.浮点型家族3.构造类型4.指针类型5.空类型二、整型在内存中的存储1.原码、反码、补码2.内存中怎样存储3.大小端字节序1....
    99+
    2024-04-02
  • 深度解析C语言中数据的存储
    目录前言数据类型介绍类型的基本归类整型家族浮点数家族构造类型指针类型空类型前言 在VS编译器里有release和debug两种形式,debug包含调试信息,release不包含调试信...
    99+
    2024-04-02
  • C语言数据在内存中的存储
    这篇文章主要介绍了C语言数据在内存中的存储,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据类型详细介绍在前面C语言基础概览中,已经提到过了基本的C语言内置类型,但C语言的数...
    99+
    2023-06-15
  • C语言数据的存储超详细讲解中篇练习
    目录前言数据的存储的知识点练习练习 1练习 2练习 3练习 4练习 5练习 6练习 7总结前言 本文继续学习数据在内存中存储的相关知识点。 数据存储整型提升 数据的存储的知识点练习 ...
    99+
    2024-04-02
  • C语言数据的存储超详细讲解上篇
    目录前言1、数据类型介绍类型的基本归类2、整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.2.1 什么是大小端2.2.2 大端和小端意义2.2.3 写程序判断字节序总...
    99+
    2024-04-02
  • C语言数据结构之单链表存储详解
    目录1、定义一个链表结点2、初始化单链表3、输出链表数据4、完整代码如果说,顺序表的所占用的内存空间是连续的,那么链表则是随机分配的不连续的,那么为了使随机分散的内存空间串联在一起形...
    99+
    2024-04-02
  • 带你了解C语言的数据的存储
    目录C语言当中使用的数据类型使用的类型整型类浮点类型内存当中的存储原码、反码、补码大小端什么是大小端浮点数的存储浮点数的存储浮点数的存储规则指数 E 从内存当中取出总结C语言当中使用...
    99+
    2024-04-02
  • C语言中数据在内存如何存储
    目录数据类型类型的基本归类整形有符号数和无符号数是否char 等于signed char呢?浮点型构造类型(自定义类型)指针类型空类型整形在内存中的存储原码,反码,补码正整数负整数大...
    99+
    2024-04-02
  • C语言详细图解浮点型数据的存储实现
    目录在引入知识之前,先来看一个案例,就知道了解浮点型数据存储的重要性与必要性。 举个例子: #define _CRT_SECURE_NO_WARNINGS 1 #include<...
    99+
    2024-04-02
  • C语言中数据存储的示例分析
    这篇文章主要介绍了C语言中数据存储的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(壹)大端小端藏端倪1.1  什么是大端小端大端(存储)模式,是指数据的低...
    99+
    2023-06-29
  • C语言中数据的存储举例分析
    这篇文章主要介绍“C语言中数据的存储举例分析”,在日常操作中,相信很多人在C语言中数据的存储举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中数据的存储举例分析”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-25
  • C语言数据在内存中是怎样存储的
    这篇文章主要介绍“C语言数据在内存中是怎样存储的”,在日常操作中,相信很多人在C语言数据在内存中是怎样存储的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言数据在内存中是怎样存储的”的疑惑有所帮助!接下来...
    99+
    2023-06-08
  • C语言中数据在内存中是怎么存储的
    本篇文章为大家展示了C语言中数据在内存中是怎么存储的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。数据类型常见的数据类型常见的数据类型字节char字符数据类型1short短整型2int整形4long...
    99+
    2023-06-22
  • C语言中数据是如何存储在内存中的
    目录前言‍数据类型介绍‍整形数据在内存中存储‍浮点型数据在内存存储前言 在计算机内存中,数据的存储方式都是以0和1的形式存储,也就是二进制的形式,数据是如何向...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作