是否有一个 Matlab 函数可以返回浮点数的二进制表示?
问问题
9220 次
3 回答
4
在 Matlab 中,可以使用 Java JDK 函数。
将 Matlab 中的浮点数(单精度 32 位数字)转换为二进制字符串表示的简短答案可能是:
flt=3.14
import java.lang.Integer java.lang.Float;
Integer.toBinaryString(Float.floatToIntBits(flt))
长答案:将 Matlab 中的浮点数(单精度 32 位数)转换为二进制字符串表示
function out=float2binstring(flt)
% converts a float number to binary in matlab according to IEEE754
%
% Usage:
% float2binstring(-3.14)
%
% http://www.h-schmidt.net/FloatApplet/IEEE754.html
%
% Limitations:
% Rounding errors: Not every decimal number can be expressed exactly as a floating
% point number. This can be seen when entering "0.1" and examining its binary representation which is either slightly smaller or larger, depending on the last bit.
%
% Andrej Mosat, nospam@mosi.sk
% 03/2012
% v0.0
% License: GNU GPL
%
% See also: BINSTRING2FLOAT
% this is a trick to use java JDK should be installed, tested on Matlab R2010
import java.lang.Integer java.lang.Float;
if ( ~isnumeric(flt) )
error('input must be a number');
end
out=Integer.toBinaryString(Float.floatToIntBits(flt));
end
以及将二进制字符串转换为浮点数,但需要一点开销:
function out=binstring2float(binstr)
% converts a binary string to float number according to IEEE754
%
% Usage:
% binstring2float('11000000010010001111010111000011')
% -3.14
%
%
% http://www.h-schmidt.net/FloatApplet/IEEE754.html
%
% Limitations:
% Rounding errors: Not every decimal number can be expressed exactly as a floating
% point number. This can be seen when entering "0.1" and examining its binary representation which is either slightly smaller or larger, depending on the last bit.
%
% Andrej Mosat, nospam@mosi.sk
% 03/2012
% v0.0
% License: GNU GPL
%
% See also: FLOAT2BINSTRING
import java.lang.Long java.lang.Float;
if isequal(class(binstr), 'java.lang.String')
binstr=char(binstr);
end
if ( ~isstr(binstr) )
error('input must be a binary string');
end
% Error handling for binary strings should be added here
% the sign is negative
if binstr(2)=='1'
binstr(2)='';
isnegative=1;
else
isnegative=0;
end
out=Float.intBitsToFloat( Long.parseLong( binstr , 2) );
if isnegative
out=-out;
end
end
于 2012-03-31T21:16:57.730 回答
2
看起来您可以使用num2hex
将浮点数转换为十六进制字符串。
于 2011-12-20T04:22:16.950 回答
1
检查此 FileExchange 提交:
于 2011-12-20T04:20:39.370 回答