这对typecast
在MATLAB中的作用是什么?
y=typecast(x,'single');
这是什么意思?当我运行typecast(3,'single')
时,它会0 2.1250
。
我不明白那是什么。
我正在尝试将其转换为Java,我该怎么做?
从MATLAB手册:
single - 转换为单精度
语法
B = single(A)
描述
B = single(A)
转换矩阵A. 单精度,返回 B.中的值可以是任何数字 对象(如双)。如果A是 已经单精度,单一有 没有效果。单精度数量 需要的存储量少于 双精度数量,但有 精度较低,范围较小。
答案 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 00
是0
的单精度表示。我认为由于机器的字节序,它们以相反的顺序出现,而在大端机器上,我认为你会得到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
),则可以更改数字球,而不是容器。