将64位二进制一维向量转换为相应的浮点和有符号十进制数

时间:2019-07-20 02:03:38

标签: matlab

请尝试让我知道如何实现此目标,但是没有得到vector的理想结果,u = [0; 1; 0; 0; 1; 1; 0; 0; 0; 0; 1; 1; 0; 1; 1; 1; 1; 0; 0; 0; 1; 0; 0; 1; 0; 1; 0; 0; 0; 0; 0; 1; 0; 1; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 1; 1; 0; 1; 0; 1; 0; 1; 1; 0; 1; 1; 1; 1; 0; 0; 0; 0; 0; 0]; 期望的输出= -108.209 问候 尼丁

1 个答案:

答案 0 :(得分:1)

首先,我认为您对正确答案的期望已过。双精度的第一位是符号。因此,如果您期望负数,则第一位应该是1。即使您的位向后,它也仍然是前导0。如果要搜索它们,则有各种各样的二进制浮点计算器。这是一个例子: http://www.binaryconvert.com/result_double.html?hexadecimal=4C378941600D5BC0

要回答有关如何在Matlab中执行此操作的问题,Matlab的用于从二进制转换的内置函数为bin2dec。但是,期望将char数组作为输入,因此您需要使用num2str转换为char。这里的另一个技巧是bin2dec仅支持多达53位。因此,您需要将其分为两个32位数字。最后一个难题是使用typecast将您的32位整数对转换为双精度数。放在一起,看起来像这样:

bits = [0;1;0;0;1;1;0;0;0;0;1;1;0;1;1;1;1;0;0;0;1;0;0;1;0;1;0;0;0;0;0;1;0;1;1;0;0;0;0;0;0;0;0;0;1;1;0;1;0;1;0;1;1;0;1;1;1;1;0;0;0;0;0;0];
int1 = uint32(bin2dec(num2str(bits(1:32)')));
int2 = uint32(bin2dec(num2str(bits(33:64)')));
double_final = typecast([int2 int1],'double')