В 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
. (Обратите внимание, что вывод представляет собой строку.)
person
Ben Hocking
schedule
19.06.2011