我使用de2bi(x)但它只对整数有帮助我想将点数转换成二进制数字
de2bi(x)
将此9.2553转换为十进制小数部分也可以在Matlab中转换为二进制格式,如果可能的话,而不是没有函数文件的代码需要输出
答案 0 :(得分:2)
MATLAB当然已经使用IEEE-754 binary64格式将二进制值存储在二进制中。我们所要做的就是以某种方式让MATLAB向我们展示这些位。
一种方法是使用typecast,这使得MATLAB将一组内存位置解释为不同的类型。在这种情况下,我们将使MATLAB认为double
是uint64
,然后通过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^44
(2^44
是2扩展的最小幂,它给出整数结果)。
代码示例:
expandedRes = dec2bin(9.2553*2^44);
res = expandedRes[1:end-44, '.', end-43:end);
结果:
res =
1001.01000001010110110101011100111110101010110011