我用de2bi(x),但是它只是我想用點十進制數轉換成二進制轉換9.2532十進制轉換成二進制MATLAB
de2bi(x)
轉換這一9.2553與小數部分小數也轉換成有助於整數在Matlab中的二進制格式,如果有可能比不具有編碼功能的文件要輸出
我用de2bi(x),但是它只是我想用點十進制數轉換成二進制轉換9.2532十進制轉換成二進制MATLAB
de2bi(x)
轉換這一9.2553與小數部分小數也轉換成有助於整數在Matlab中的二進制格式,如果有可能比不具有編碼功能的文件要輸出
快速google search會給你你想要的東西......
編輯:我有阿迪鏈接d來自MathWorks FileExchange。通常很難將分數轉換爲二進制,因爲在分數轉換爲二進制形式時,帶分數的小數趨於具有無窮小數位。所以你可以有近似的結果。
編輯2:您可以使用類似wolframalpha的網站來檢查結果。 9.2553 into binary看起來像1001.01000001010110110 ...這就是我的意思。我不確定Rotem的方法是否會爲每個小數提供非常接近的值,但它看起來很好,或者只是通過循環使用除法來使用數學定義。
特設溶液:
由2^44
展開(以獲得的整數值)。
將整數結果轉換爲二進制。
通過放置「十進制」點減少2^44
。
(2^44
是給出整數結果的2次展開的最小次方)。
代碼示例:
expandedRes = dec2bin(9.2553*2^44);
res = expandedRes[1:end-44, '.', end-43:end);
結果:
res =
1001.01000001010110110101011100111110101010110011
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
我做的,但沒有確切的結果我got..please先生/ MAM提意見,如果你得到了它 –
請不要加,其中* *僅包含一個答案鏈接。你至少應該總結一下,例如「在MATLAB FileExchange上有一個名爲XYZ的軟件包,這裏是鏈接。」如果你能在這種情況下展示一個例子如何使用這個包,那將會更好。 – hbaderts