将9.2532十进制转换为二进制matlab

时间:2017-03-16 06:21:46

标签: xcode matlab binary

我使用de2bi(x)但它只对整数有帮助我想将点数转换成二进制数字

de2bi(x)

将此9.2553转换为十进制小数部分也可以在Matlab中转换为二进制格式,如果可能的话,而不是没有函数文件的代码需要输出

2 个答案:

答案 0 :(得分:2)

MATLAB当然已经使用IEEE-754 binary64格式将二进制值存储在二进制中。我们所要做的就是以某种方式让MATLAB向我们展示这些位。

一种方法是使用typecast,这使得MATLAB将一组内存位置解释为不同的类型。在这种情况下,我们将使MATLAB认为doubleuint64,然后通过dec2bin发送“整数”。在此之后我们必须对字符串进行一些分解以获得实际值。

注意:目前仅适用于正值。如果您也需要负值,我将不得不做出一些调整。

function binstr = double2bin(d)
   d = double(d);   % make sure the input is a double-precision float
   ieee754_d = dec2bin(typecast(d, 'uint64'),64);   % read double as uint64
   % IEEE-754 64-bit double:
   %    bit 1 (msb) = sign bit (we'll ignore this for now)
   %    bits 2-12   = exponent with bias of 1023
   %    bits 13-64  = significand with leading 1 removed (implicit)
   exponent = bin2dec(ieee754_d(2:12))-1022;   % 2^n has n+1 bits
   significand = ['1' ieee754_d(13:64)];
   if (exponent < 1)   % d < 1, so we'll need to pad with zeros
      binstr = ['0.' repmat('0',1,-exponent) significand];
   else   % d >= 1; move exponent bits to the left of binary point
      binstr = [significand(1:exponent) '.' significand(exponent+1:end)];
   end
end

试运行:

>> double2bin(9.2532)
ans = 1001.0100000011010001101101110001011101011000111000100

答案 1 :(得分:1)

临时解决方案:

2^44展开(获取整数值) 将整数结果转换为二进制 通过放置“十进制”点减少2^442^44是2扩展的最小幂,它给出整数结果)。

代码示例:

expandedRes = dec2bin(9.2553*2^44);
res = expandedRes[1:end-44, '.', end-43:end);

结果:

res =

1001.01000001010110110101011100111110101010110011