数据存储:数据类型的作用,字节序,整型存储,浮点型存储(肯定能看懂)


前言

今天给大家来介绍一下自己最近学习的数据类型的作用、字节序、整型存储、浮点型存储的知识点。


一、数据类型的作用

作用:
1.确定所能访问的空间大小

2.看待计算机中数据的角度(即告诉计算机这是什么类型的数据,读取时应该读取几个字节)


二、字节序

问题:为什么数据int a=0x11223344在我们的电脑内存中存储的方式是44 33 22 11 呢?

1.概念

CPU对内存中的数据以字节为单位进行存取的顺序

2.大端和小端

首先我们要知道,内存是有高低地址之分的,同时一个数据的二进制存储也有高低位之分,具体如下:
在这里插入图片描述
存储方式:
大端:低地址存高位(顺着存储)
小端:低地址存低位(反着存储)

例如以int a=0x01020304为例:
在这里插入图片描述
上图展示了两种存储方式在内存中的存储

那么我们的电脑究竟是大端存储还是小端存储呢?这取决于什么呢?
其实,我们的主机使用的字节数取决于 CPU架构 : X86(小端),X64(小端),MIPS(大端)

PS:总而言之,正常情况我们所使用的电脑都属于小端存储

3.字节序和网络通讯

字节序主要是在网络通信时,不同主机之间的通信,如果字节序不同会造成数据的二义性。所以,在网络通信时,一般会定义一个自己的网络字节序标准来规避。


三、整型存储

1.原码反码补码

以char类型的-10为例,最高位(符号位)为1表示负数,为0表示正数:

原码:一个数据直接转换成二进制 --> 1000 1010
反码: 符号位不变,数值位取反 -->1111 0101
补码:反码+1–>1111 0110

PS:对于正数和无符号数来说,原码=反码=补码。

2.使用补码存储的原因

我们要知道,整数在内存中的存储是以 补码形式来存储的,为什么呢?原因是 它可以节省一些运算单元。
例如:整数的加法运算和减法运算统统可以用加法来完成,不必再增设减法器:
1.加法:加法就是正常的表示。不进行赘述了。
2.减法运算(加法表示):
在这里插入图片描述
下面有一道例题来加深印象:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main() {

	char a = -1;//-1补码:11111111 11111111 11111111 11111111
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d\nb=%d\nc=%d\n", a, b, c);

	return 0;
}

输出结果:

a=-1
b=-1
c=255

四、浮点型存储

1.小数的二进制存储(32位)

方法:乘2取整法。
小数在内存中存储是以浮点形式存储的,例如:
在这里插入图片描述

IEEE754标准文档规定,浮点数的表示分为三个部分:
1.S-符号位,占据1个比特位(0表示正数,1表示负数)
2.E-阶码位(指数位) ,在32位中占据8个比特位(以2 + 127表示)
3.M-尾数,占据23个比特位(例如上图中的1.0101就是尾数)

以5.25的存储为例:
它可以表示为:
0 10000001 10101000 00000000 0000000
因为指数位的数值有可能出现负数,但是指数域是无符号的,无法表示负数,所以采用指数基数: 127, 真正指数位存储的数据是实际指数值+ 127
又因为浮点存储再进行会进行浮点移动,总会移动到第一个1的后边,因此所有的数表示都是:1.xxxxxxx
采用这种方式之后,因为尾数部分,第-个比特位总是存储1,如果把这个1忽略掉,采用这种规则,用的时候再给加上,1就不用存储了,就节省了1个比特位,提高了精度。
所以5.25实际存储的是这样的:
0 10000001 01010000 00000000 0000000

有一说一,可能有点晦涩难懂,可以看一下这个例题来结合理解:
在这里插入图片描述

在这里插入图片描述

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木是木木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值