matlab中只能夠實現十進位制整數轉換為二進位制,對於小數部分會直接忽略,這對於精確度很高的資料來說,非常不合理。基本原理:下面是自己編寫的實現十進位制小數的二進位制編碼的matlab**。
**:含小數的十進位制數轉二進位制:dec2inderectbin()
% d 十進位制數(或陣列)
% down 十進位制數取值範圍的下界
% up 十進位制數取值範圍的上界
% esp 精度
function [dec2inbin,intl,decl]
= dec2inderectbin(d,down,up,esp)
% dec2inbin 二進位制陣列。行數為輸入的十進位制數的個數,列數為m
% intl 整數部分長度,個數為輸入的十進位制數的個數
% decl 小數部分長度,個數為輸入的十進位制數的個數
% 老師講的公式,十進位制數用幾位二進位制表示
m = ceil(log2(
(up-down)
/esp));
dec2inbin=
;intl=
;decl=
;for i=
1:size(d,2)
dec=d(i)
;% 整數部分
integer=floor(dec)
; integer2bin=dec2bin(dec)
; intl=
[intl size(integer2bin,2)
];% 小數部分
decimal=dec-integer;
decimal2bin=
;for j =
1: m-size(integer2bin,2)
decimal2bin =
[decimal2bin num2str(floor(decimal*2)
)]; decimal=decimal*
2-floor(decimal*2)
; end
decl=
[decl size(decimal2bin,2)
];% 整數和小數拼接
dec2inbins=
[integer2bin decimal2bin]
; dec2inbin=
[dec2inbin;dec2inbins]
;end
end
二進位制表示的小數轉十進位制數:inderectbin2dec()
% b 二進位制編碼陣列。行數為需要解碼的二進位制數個數,列數為二進位制編碼位數
% down 十進位制數取值範圍的下界
% up 十進位制數取值範圍的上界
% intl 整數部分長度,個數為輸入的十進位制數的個數
% decl 小數部分長度,個數為輸入的十進位制數的個數
function dec=inderectbin2dec(b,down,up,intl,decl)
% dec 十進位制數
dec=
;for i=
1:size(b,1)
bin=b(i,:)
;% 整數部分
integer=bin2dec(
bin(
1:intl(i)))
;% 小數部分
decimal=0;
for j = intl(i)+1
: intl(i)
+decl(i)
decimal=decimal+str2num(
bin(j))*
2^(intl(i)
-j);
enddec=
[dec;integer+decimal]
;end
end
二進位制轉十進位制
二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...
二進位制與十進位制
人們在生產實踐和日常生活中創造了多種表示數的方法,這些數的表示規則稱為數制。例如人們常用的十進位制 計算機中採用的二進位制等。十進位制計數法的加法規則是 逢十進一 任意乙個十進位制可用0 1 2 3 4 5 6 7 8 9十個字元的組合表示,它的基數是 10。二進位制計數法的加法規則是 逢二進一 任...
十進位制轉二進位制
includeint dg unsigned n,int c 注意 引數型別是unsigned int main 陣列全部初始化為0 printf d n sizeof int unsigned temp,u temp u 4294967295u int tu int u printf u u,tu...