今天来给大家分享一下我学到的关于数据存储的知识

简介: 今天来给大家分享一下我学到的关于数据存储的知识

前面的学习我们可能见过char、short (int)、int、long (int)、long long、float、double这些定义变量时所使用的内置类型,那么它们到底有什么用呢?


char        //字符数据类型           在内存中开辟1个字节的空间大小

short       //短整型                     在内存中开辟4个字节的空间大小

int         //整形                           在内存中开辟4个字节的空间大小

long        //长整型                     在内存中开辟4/8个字节的空间大小

long long   //更长的整形           在内存中开辟8个字节的空间大小

float       //单精度浮点数           在内存中开辟4个字节的空间大小

double      //双精度浮点数        在内存中开辟1个字节的空间大小


当我们在定义变量的时候我们要根据变量的类型和大小来合理的使用这些内置类型


变量又基本分为字符和整形,定义字符时往往使用char,而整形又分为整数和浮点数,这些就要依情况而定了。


那么下面我就来说说整数和浮点数在计算机中是怎样存储的


首先我们得知道计算机是二进制机器,它只能认识0和1,我们生活中往往使用的是十进制,而计算机就需要将十进制转化为二进制,然后以补码的形式存储,那么什么又是补码呢?


要想知道什么是补码,就得先知道什么是原码和反码。


三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位 正数的原、反、补码都相同。


原码

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

反码

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

补码

反码+1就得到补码。


一般整形在计算机中都是以补码的形式存储


浮点数在计算机中又是怎样存储的呢?


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


(-1)^S * M * 2^E

(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。


举个例子来说:


十进制的6.0,写成二进制是110.0,相当于1.1*2^2

按照上面的格式,可以得出S = 0,M = 1.1,E = 2。


IEEE 754规定:


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


这里有一点不同E存储的时候往往需要加上一个特定的数字,这里加的是127


而M部分存储的时候,因为M大于等于1小于2,所以为了节省一位有效数字,只是将小数点后面的数字存储进去,当需要拿出它的时候,前面只需加上一个1。


20.png

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M

这里E需要加上1023

21.png

举一个例子:


十进制9.0用在计算机中二进制表示为1001,用IEEE表示为(-1)^0*1.001*2^3

S=0,M=1.001,E=3(记住E要加127)


在计算机中就是这样存储的

0 10000010 00100000000000000000000(这里空格是为了看的更清楚)


所以他的地址为0100 0001 0001 0000 --> 0x 41100000


而因为一般我们的计算机都是小端字节序,所以存储的就是00 00 10 41


那么就谢谢大家的观看

相关文章
|
自然语言处理 并行计算 Linux
零成本带你体验手搓AIGC模型
零成本带你体验手搓AIGC模型
1277 0
零成本带你体验手搓AIGC模型
|
机器学习/深度学习
【从零开始学习深度学习】24.神经网络中池化层的作用:最大池化与平均池化
【从零开始学习深度学习】24.神经网络中池化层的作用:最大池化与平均池化
|
存储 C语言
详细解读AVL树(查找、插入、删除)——C语言
详细解读AVL树(查找、插入、删除)——C语言
144 0
|
SQL 缓存 关系型数据库
(二)全解MySQL:一条SQL语句从诞生至结束的多姿多彩历程!
在上篇文章中,我们以《MySQL架构篇》拉开了MySQL数据库的的序幕,上篇文章中将MySQL分层架构中的每一层都进行了详细阐述。而在本篇中,则会进一步站在一条SQL的角度,从SQL的诞生开始,到SQL执行、数据返回等全链路进行分析。
523 1
|
网络协议 Linux 开发者
探索Linux下的`dig`命令:DNS查询的利器
`dig`是Linux下强大的DNS查询工具,适用于系统管理员、网络工程师和开发者。它支持查询A、MX、NS、CNAME等记录类型,以及反向DNS。高级功能包括跟踪查询过程、显示额外信息、指定查询服务器和批量查询。学习`dig`能助你更好地理解DNS工作原理和优化网络问题。
commons-httpclient 和 httpclient 区别
commons-httpclient 和 httpclient 区别
565 0
halcon基础系列之几何工具相关算子
halcon基础系列之几何工具相关算子
530 0
|
应用服务中间件
IDEA启动报错:Error running ‘Tomcat 8.5.34‘: Address localhost:1099 is already in use
IDEA启动报错:Error running ‘Tomcat 8.5.34‘: Address localhost:1099 is already in use
460 0
|
边缘计算 人工智能 物联网
物联网未来展望:5G、AI与边缘计算的融合之路
本篇详细探讨了物联网领域的未来展望,包括5G与物联网的融合、人工智能在物联网中的应用,以及边缘计算与物联网的发展趋势。通过代码示例,读者可以了解如何利用5G网络进行物联网设备间的高效数据传输,以及如何应用人工智能技术进行智能感知和数据分析。此外,我们还介绍了边缘计算在物联网中的重要作用,以及如何在边缘设备上进行数据处理和分析。通过本篇内容,读者将对物联网未来的技术发展有更全面的认识,为把握物联网领域的机遇提供有益的前瞻性指导。
967 0