Matlab имеет функцию dec2bin
, которая преобразует десятичное число в двоичную строку.Так, например, dec2bin(3)
вернул бы 11
.
Также существует соответствующий bin2dec, который принимает двоичную строку и преобразует в десятичное число, так что bin2dec('11')
вернул бы 3
.
Если вы хотите преобразовать нецелое десятичное число в двоичную строку, сначала вы захотите определить, какое наименьшее двоичное место вы хотите представить, а затем немного до и послеобработки, в сочетании с dec2bin, чтобы получить результаты, которые вы ищете.Итак, если наименьшее двоичное место, которое вам нужно, это 1/512-е место (или 2 ^ -9), то вы можете сделать следующее (где binPrecision равно 1/512):
function result = myDec2Bin(decNum, binPrecision)
isNegative=(decNum < 0);
intPart=floor(abs(decNum));
binaryIntPart=dec2bin(intPart);
fracPart=abs(decNum)-intPart;
scaledFracPart=round(fracPart / binPrecision);
scaledBinRep=dec2bin(scaledFracPart);
temp=num2str(10^log2(1/binPrecision)+str2num(scaledBinRep),'%d');
result=[binaryIntPart,'.',temp(2:end)];
if isNegative
result=['-',result];
end
end
РезультатmyDec2Bin(0.256, 1/512)
будет тогда 0.010000011
, а результат myDec2Bin(-0.984, 1/512)
будет -0.111111000
.(Обратите внимание, что выводом является строка.)