在MATLAB中将类型转换为单一

时间:2011-05-25 09:40:14

标签: matlab casting

这对typecast在MATLAB中的作用是什么?

y=typecast(x,'single');
这是什么意思?当我运行typecast(3,'single')时,它会0 2.1250

我不明白那是什么。

我正在尝试将其转换为Java,我该怎么做?

从MATLAB手册:

  

single - 转换为单精度

     

语法

B = single(A)
     

描述

     

B = single(A)转换矩阵A.   单精度,返回   B.中的值可以是任何数字   对象(如双)。如果A是   已经单精度,单一有   没有效果。单精度数量   需要的存储量少于   双精度数量,但有   精度较低,范围较小。

2 个答案:

答案 0 :(得分:4)

typecast重新解释用于表示一种类型值的字节,就好像那些相同的字节表示不同的类型一样。例如,MATLAB中的常量3是IEEE双精度值,这意​​味着它需要8个字节来存储它。在这种情况下,这八个字节是

40 08 00 00 00 00 00 00

MATLAB中类型single的值是IEEE单精度值,这意​​味着它只需要4个字节来存储它。因此,double的8个字节将映射到两个4字节的单个字节,即

40 08 00 00, and
00 00 00 00

事实证明40 08 00 00是值2.125的单精度表示,正如您可能猜到的那样,00 00 00 000的单精度表示。我认为由于机器的字节序,它们以相反的顺序出现,而在大端机器上,我认为你会得到2.125 0

在C ++中,这就像reinterpret_cast。在Java中,似乎没有直接的映射,但this Stack Overflow question的答案讨论了一些替代方法,例如序列化。

答案 1 :(得分:1)

从运行help typecast看起来它改变了数据类型,但保持位分配相同,而single( )保持数字相同,但改变了位排列。

如果我理解它,你可以想到它就像你有两个盒子,每个盒子最多包含8个球。可以说,方框1已满,而方框2包含3个球。我们现在typecast进入一个盒子里有4个球的系统。

这个系统需要三个盒子来固定我们的球。所以我们有第1和第2个盒子。方框3包含3个球。

所以你有[8,3]转换为[4,4,3]。

或者,如果您使用与single( )相同的方式将数字转换为新系统(例如,将int8更改为single),则可以更改数字球,而不是容器。