間接二進位制編碼 實現十進位制小數的二進位制編碼

2021-10-02 17:34:56 字數 1948 閱讀 7917

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...