练好敲代码的内功——初识数据储存

最近小编学习了数据储存的相关知识,学的过程中感觉这部分知识可以帮助更加深入本质地去理解代码,但是由于小编脑容量太小,没有办法一次性把这些知识全部记住,于是就想借用博客的方式来帮助自己理解巩固这部分的相关知识。那么废话不多说,我们开始。

一、数据类型介绍

首先再来回顾一下基本的内置类型
char 字符数据类型,占据储存空间大小为一个字节
short 短整型,占据储存空间大小为两个字节
int 整形,占据储存空间大小为四个字节
long 长整型,占据储存空间大小为四个字节
long long 更长的整形,占据储存空间大小为八个字节
float 单精度浮点数,占据储存空间大小为四个字节
double 双精度浮点数,占据储存空间大小为八个字节
类型不同,使用其开辟内存空间的大小不同
同一块内存空间,用不同的类型视角去解读传达的信息也不相同

二、类型基本归类

大类的话主要是分成整型和浮点型两类,还有就是自定义的构造类型,指针类型和空类型,下面主要枚举整型和浮点型
整型家族:
char:
unsigned char
signed char
short:
unsigned short [int]
signed short [int]
int:
unsigned int
signed int
long:
unsigned long [int]
signed long [int]
浮点数家族:
float
double

三、整型在内存中的储存

首先我们要先来了解原反补码的概念
计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
原码
直接将二进制按照正负数的形式翻译成二进制就可以。
看到这里,要将正数和负数区分开了,
正数的反、补码就是原码。
而负数的反码和补码遵循以下规则
反码
将原码的符号位不变,其他位依次按位取反得到。
补码
反码+1得到补码。
下面重点来了!!!
对于整形来说:数据在内存中存放的方式是以补码的形式存放。
这个实在是太重要了,我觉得这句话是理解整型在内存中储存的基础
然后我们再来介绍大小端
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
看着是不是有点头大?我们来画一张图
在这里插入图片描述
图中可以清楚地看到,大端就是将数据在图示方框下正着写,小段就是将数据以字节为单位倒着写(就是字节内部顺序不变,字节外部顺序颠倒)
(方框代表内存)
本文只是介绍了一些基本的概念,整型存储的水很深,我现在还没有完全把握住(狗头),等我把握住了再回来追更。

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

浮点数的储存相对于整型更加复杂
我们用一张图来表示
我们知道,数据在内存中都是以二进制的形式来储存的
同样的一个数据用不同类型去解读会有不同的效果
比如11111111111111111111111111111111
用整型来解读的话这个二进制数据会被解读成数字-1
但用浮点型来解读的话就不一样了
以浮点型的视角来解读的话
在这里插入图片描述

我们会把这个32位的二进制数字分成个s,E,M三个模块
这三个模块分别代表什么含义呢?
下面看一个例子
浮点数5.50的表示方法
在这里插入图片描述
我们可以认识到:
任何一个浮点型数字都可以由一个-1的0或1次方乘上一个位于1~2之间的数再乘上2的E次方来表示
图中s取值为0或1,M取小数点后的数字,E取图中2的指数
更进一步了解,我们认识到
E是一个无符号整数
这就意味着对于float类型,E的取值范围是0~255,但是,我们知道科学计数法中E是可以为负数的,
因此为了表示负数,我们规定了一个中间数127,存入内存时E的真实值必须要先加上127,再存到
内存中。
比如例中的E=2,我们需要加上127得到129,放进内存中就是10000001
指数E从内存中取出还可以再分成三种情况:
E为全零:
这种情况下,我们规定E的真实值为1-127,相对应的,M还原为0.xxxx的小数,保留小数点后的数字
这种表示方法可以更加清晰地看出该数字是一个无限接近于零的数字。
E为全一:
这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s)。
E不为全零或者全一:
那么我们就按照上述法则将E-127还原为真实值,把M的个位上的1给补上。
以上就是float类型的数据存储,double类型与float类型相似,下次有机会再码。

写在后面:感觉写博客真的很爽,学校里的论文绞尽脑汁凑字数,但写博客却不知不觉写了两千字,
这可能也是主动和被动的区别吧。希望以后随着对编程的不断学习,我能写出越来越多的博客。
(小白水平毕竟有限,连我自己都觉得写得很浅,但凡事总有个过程不是,我相信随着我层次的不断
提升,我会写出越来越好的博客,加油奥利给!(狗头保命))。

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值