0
点赞
收藏
分享

微信扫一扫

C语言--数据的存储

成义随笔 2022-01-31 阅读 75

目录

前言

一、数据类型介绍

1.1类型的基本分类

1.整型家族

2.浮点型家族

3.构造类型--自定义类型

4.指针类型

5.空类型

二、整形在内存中的存储

1.原码、反码、补码

2.大小端字节序介绍

三、浮点型在内存中的存储

3.1 浮点数存储规则

总结



前言

关于本节数据的存储主要有以下内容:

1. 数据类型详细介绍

2. 整形在内存中的存储:原码、反码、补码

3. 大小端字节序介绍及判断

4. 浮点型在内存中的存储解析

一、数据类型介绍

C语言中,主要的数据类型有:

类型的意义:

1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。

2. 如何看待内存空间的视角。

1.1类型的基本分类

1.整型家族

2.浮点型家族

3.构造类型--自定义类型

4.指针类型

5.空类型


二、整形在内存中的存储

1.原码、反码、补码

我们都知道,所有数据在内存中的储存形式都是二进制码。对于整数,在计算机中有不同的表示方法:

计算机中的整数有三种表示方法,即原码、反码和补码。 三种表示方法均有符号位数值位两部分,其中符号位都是用0表示“正”,用1表示“负”。数值位则根据整数的正负而有区别:

1.负整数的原码、反码、补码均不同:

原码:直接将二进制按照正负数的形式翻译成二进制就可以。

反码:将原码的符号位不变,其他位依次按位取反就可以得到了。

补码:反码加1。

2.正整数的原码、反码、补码均相同:

注意:对于整形来说:数据存放内存中其实存放的是补码。 

2.大小端字节序介绍

一个数字在内存中的存储的顺序是可以随意的,只要你能保证取出来的数据是正确的就行,但为了存储的方便,其实都是采取两种存储顺序,即大端和小端。

1.什么是大小端?

 2.为什么有大小端?

3.例题:设计一个程序来判断当前机器的字节序。

分析:要判断大小端,我们可以先输入一个已知的整型数据,比如0x11223344,用十六进制更方便判断。然后读取低地址即第一个字节存储的数据,根据这个数据是0x11还是0x44来判断大小端。

//写代码判断机器的大小端
int main()
{
	int a = 0x11223344;//十六进制的方式:(高)11 22 33 44(低)
	char* pa = &a;//取内存中第一个字节的数字,因此用 char* 类型
	if (0x11 == *pa)//大端:数字的高地址存在内存的低地址,所以第一个字节应该存0x11
	{
		printf("大端\n");
	}
	else if (0x44 == *pa)//小端:数字的低地址存在内存的低地址,所以第一个字节应该存0x44
	{
		printf("小端\n");
	}

}

运行效果:

通过调试监视内存,我们发现VS2022确实是使用小端模式的。


三、浮点型在内存中的存储

浮点数和整数在计算机中的存储方式是截然不同的。

3.1 浮点数存储规则

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

举例来说:十进制的5.0,写成二进制是 101.0 ,相当于1.01×2^2 。那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2。那么,s=1,M=1.01,E=2。

 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。内存结构如下:

  图源C语言浮点型数据存储结构_小哈-whzhaochao-CSDN博客_float存储结构

IEEE 754对有效数字M和指数E,还有一些特别规定。

至于指数E,情况就比较复杂。


总结

数据在计算机中的存储方式。

举报

相关推荐

0 条评论