首页 > 编程知识 正文

golang内存(golang分布式存储)

时间:2023-05-05 02:06:08 阅读:77129 作者:2091

在Go语言编程中,有两种类型用于表示小数:

float32 (单精度类型、4字节字节、占32位二进制位) )。

float64 (双精度类型、8字节字节、占64位二进制位) ) )。

那么,计算机是如何将浮点型存储在内存中的呢?

现在,让我们从计算机中最小单位的位(二进制位)方面进行详细分析。

我们知道计算机中的数据最终必须转换为二进制数据并存储。

任何数据(字符、图像、视频、音频)存储在计算机上都会生成类似0 1的二进制代码

那么,首先,让我们用二进制数据表示小数:

转换为以2为底的科学计数法:

从以上情况可以看出,对于任何数量,用二进制科学计数法表示,都是1.xxx ()尾数(* 2转换后的n次幂) )指数)。

必须注意的是,例如,上图中的十进制小数0.6表示为二进制数,表示为1001个循环的无限循环小数。

这是浮点数精度问题的根源之一,是用代码声明的小数0.6,计算机底部不能正确存储其无限循环的二进制数。

只能保存零舍一入(如十进制四舍五入)后的近似值。

对于小于0负数,可以表示为-1.xxx (尾数) * 2的n次幂)指数)

因此,要在内存中存储此小数,可以将其分解为三个部分进行存储。

符号

尾数

指数

如图所示:

具体的记忆方式如上图所示。 最高有效位存储1位的符号,指数部分占8bits(4字节)或11bits字节),其馀部分全部用于尾数部分的存储。

对于指数部分,此处存储的结果是实际指数的偏移。

在此设定偏移量是为了不在指数部分出现负数,全部设为0以上的正整数。

尾数部的保存,由于是二进制的科学计数法,小数点前一定要以1开始,所以我们尾数部只要保存小数点以下的部分就可以了。

以下示例显示4字节浮点数(Golang的浮点32 )。

让我们看看8字节浮点数(Golang的浮点64 )的示例。

偏移:

4字节浮点数的偏移为127

8字节浮点数的偏移为1023

加上偏移量,可以将正数和负数统一转换为无符号证书,比较容易。 举个例子吧。

如果4字节浮点数的指数部分为-7,则通常表示10000111 1是符号位,而负数。

7表示00000111 0为符号位,为负数。

如果将7和7一起加上偏移量127

7变为134,二进制表示为10000110

-7变为120,二进制表示为01111000

在两者比较大的情况下,计算机不需要比较两者的编码比特。

摘要计算机在存储小数时分为两种类型:

单精度型(32进制位,占4字节) )。

双精度型(64位,占8字节) )。

双精度型比单精度型更能准确地表示小数,但内存区域也更大。

计算机表示小数时,首先将该小数转换为以2为底的科学计数法。

然后,根据该数字,将小数分解为编码位、指数、尾数,存储到存储器中。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。