首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang float to bit语法

Erlang float to bit语法
EN

Stack Overflow用户
提问于 2021-01-14 20:32:50
回答 3查看 90关注 0票数 1

我是Erlang的新手,有人能解释一下这个代码片段中发生了什么吗?

代码语言:javascript
复制
<<2.03:64/float>>.

<<64,0,61,112,163,215,10,61>>

<<2.03:32/float>>.

<<64,1,235,133>>

我正在阅读Joe Armstrong所著的Programming Erlang: Software for a Concurrent World,以及第二章的二进制和位语法。

如果答案已经存在,请将其标记为重复。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2021-01-14 21:06:35

来自C语言的相同结果:

代码语言:javascript
复制
#include <stdio.h>
int main (int argc, char *argv[]) {
    float f = 2.03F;
    unsigned char *c;
    c = (unsigned char *) &f;
    for (int i = 0; i < 4; ++i)
        printf("%d ", c[i]);
    printf("\n");

    double d = 2.03;
    c = (unsigned char *) &d;
    for (int i = 0; i < 8; ++i)
        printf("%d ", c[i]);
    printf("\n");
}

输出:

代码语言:javascript
复制
133 235 1 64 
61 10 215 163 112 61 0 64 

或者Perl:

代码语言:javascript
复制
$ perl -wE 'say join " ", map ord, split //, pack "f", 2.03' 
133 235 1 64
$ perl -wE 'say join " ", map ord, split //, pack "d", 2.03' 
61 10 215 163 112 61 0 64

这就是浮点数在内部的表示方式。参见Floating-point aritmetic

这是一个试验values here的很好的演示。

票数 2
EN

Stack Overflow用户

发布于 2021-01-19 01:23:24

代码语言:javascript
复制
<<2.03/float>>.
<<64,0,61,112,163,215,10,61>>

在erlang中,浮点二进制文件的默认大小为64,因此输出存储为8X8= 64字节。当浮点数的默认大小为32时,它将存储为4 X 8= 32字节。下面的代码展示了如何从一个字节中提取位。

代码语言:javascript
复制
[ K || <<K:1>> <= <<2.03/float>>].

[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1] 

上述输出中的前8位是“0,1,0,0,0,0,0,0,0”,当转换为整数时,输出如下。

代码语言:javascript
复制
 erlang:list_to_integer("01000000",2).
   64

类似地,接下来的8位给0,第三组8位给61,依此类推。

票数 2
EN

Stack Overflow用户

发布于 2021-01-15 23:18:37

  1. 浮点数由密码表示。Erlang解释该密码,以便输出:

<<64,0,61,112,163,215,10,61>>

  1. 当你切掉密码的前32位时,它的意思完全不同,Erlang解释剩下的32位来输出:

<<64,1,235,133>>

这就是为什么你不能简单的得到:

代码语言:javascript
复制
    <<163,215,10,61>>

我是新来erlang的

那么浮点数的位语法就是您最不需要担心的了。如果你理解整数的含义,那就继续吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65719019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档