matlab中數制的轉換_第1頁
matlab中數制的轉換_第2頁
matlab中數制的轉換_第3頁
matlab中數制的轉換_第4頁
matlab中數制的轉換_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、clear all close all clc a=inpu t('a=');A=dec2bin(a)%十進制數變成二進制數;AA=bin2dec(A)%二進制數變成十進制數;十進制數轉換為二進制數的matlab實現 matlab提供了一個系統(tǒng)函數 dec2bin,可以用來進行十進制數的二進制轉換,不過功能有限!在 matlab 中鍵入 help dec2bin,如下:DEC2BIN Convert decimal in teger to a binary stri ng. DEC2BIN(D) returns the binary rep rese ntati on of D

2、 as a stri ng. D must be a non-n egative in teger smaller tha n 252.DEC2BIN(D,N) p roduces a binary rep rese ntati on with at least N bits.Exa mp ledec2bi n( 23) returns '10111'可見,這個函數只能轉換整數,對非整數就無能為力了.因此,自己編寫了 matlab小程序,順便也貼出來,希望對需要的人能有所幫助!A_A1.小數轉換為二進制數輸入參數有2個,一個是輸入的小數(小于1), 一個是指定轉換后的二進制位數

3、!程序源碼如下:y=dectob in (i nnum,N)%十進制小數轉換為二進制數 %輸入參數為innum和N %innum為輸入的十進制小數 %N為指定轉換后二進制的位數if (innu m>1)|(N = 0)%判斷輸入的有效性dis p( 'error!');return;endcoun t=0;tempnum=innum;record=zeros(1,N);while(N)count=count+1;%長度小于 Nif(cou nt>N)N=0;% return;endtempnum=tempnum*2;%小數轉換為二進制,乘2取整if tempnum&

4、gt;1record(count)=1;tempnum=tempnum-1;elseif(tempnum=1)record(count)=1;N=0;%stop loopelserecord(count)=0;endendy=record;2. 如果要轉換整數 , 則直接調用 matlab 的 dec2bin 即可 !3. 對于大于 1 的非整數 ,可以利用將其分為整數部分和小數部分的方法來處理 :利用 matlab 的 floor 函數可以對輸入的數 ( 設為 innum) 向下取整 , 然后利用 innum- floor(innum) 就可以得到小數部分 ,調用上面的函數就可以得到其二進制

5、表達式!注意,這里有一個小問題 ,就是 dec2bin 函數的返回值是一個 char array, 所以,我們應該先將 其轉換為 double array! 可以利用 double() 進行強制類型轉換 , 得到 ASCII 碼值 , 減去 48 就可 以得到 double array 類型的 0,1 序列 !程序代碼如下 : num,numint,numf=dectobin1(innum,N) %十進制數轉換為二進制數 % 輸入為十進制數 innum, 以及小數部分的位數 N% 輸出為三個參數 num,numint,numf %num 為輸出的二進制形式%numint 為整數部分的二進制表達

6、式%numf 為小數部分的二進制表達式sep=5;% 整數和小數部分的分隔符if(mod(innum,1)=0)% 判斷輸入是否為整數 ,mod 為取余函數 numint=dec2bin(innum);numint=double(numint)-48;numf=zeros(1,N);num=numint,sep,numf;returnend; %輸入為非整數的情況 nint=floor(innum);% 整數部分 nf=innum-nint;% 小數部分 res_nint=dec2bin(nint); res_nint=double(res_nint)-48; res_nf=dectobin(

7、nf,N); numint=res_nint; numf=res_nf;num=numint,sep,numf;其中的 dectobin 函數就是最上面的小數轉二進制函數4.似乎已經大功告成了 ,是嗎?N0,還有一個問題,那就是負數的情況,在這里,我們采用補碼的方式,如果輸入為正 ,則二進制表達式不變 ,如果為負 ,則按位取反并加 1.因此,需要對上面的 函數加上一個負數判斷以及補碼轉換的功能.最終的表示結果可以采用 1QN 的格式 . 補碼轉 換部分程序如下 :numo,numinto,numfo=conv(numint,numf,flag) %二進制數的補碼表示 % 輸入參數為 numin

8、t 整數部分的二進制表達式 ,numf 小數部分二進制表達式 ,flag 負數標志 % 輸出參數為 numo 輸入的補碼 ,numinto 整數部分的補碼 ,numfo 小數部分的補碼 if (flag=0)numo=0,numint,5,numf;% 正數 numinto=numint;numfo=numf;else% 負數 ,整數和小數部分均進行按位取反并加一l1=length(numint);l2=length(numf); num=numint,numf;l=l1+l2;for i=1:lif num(i)=1% 按位取反 num(i)=0;elsenum(i)=1;endend %取

9、反后加一 temp_l=l; while(temp_l=0)if num(temp_l)=0% 最低位為 0 num(temp_l)=1;temp_l=0;% 結束循環(huán) elsenum(temp_l)=0; temp_l=temp_l-1;end end % % % % % % % % % % %l1=length(numint);for i=1:l1if numint(i)=1% 按位取反 numint(i)=0;else numint(i)=1;endend%end% % 取反后加一%l2=length(numf);for i=1:l2if numf(i)=1% 按位取反 numf(i)=

10、0;else numf(i)=1;endtemp_l1=l1; while(temp_l1=0)if numint(temp_l1)=0% 最低位為 0 numint(temp_l1)=1;temp_l1=0;% 結束循環(huán)elsenumint(temp_l1)=0;temp_l1=temp_l1-1;endend % 取反后加一 temp_l2=l2; while(temp_l2=0) if numf(temp_l2)=0% 最低位為 0 numf(temp_l2)=1;temp_l2=0;% 結束循環(huán) elsenumf(temp_l2)=0; temp_l2=temp_l2-1;end nu

11、minto=num(1:l1);numfo=num(l1+1:l);% numinto=numint;% numfo=numf;numo=1,numinto,5,numfo;end5. 最后 ,用一個 main 函數連接以上的子函數 numo,numinto,numfo=decimal2bin(innum,N) num1,numint1,numf1,flag1=dectobin1(innum,N);numo,numinto,numfo=conv(numint1,numf1,flag1)以下原創(chuàng):function a=decimaltobin(innum,N) %十進制整數轉換為二進制數% 輸入參數為 innum 和 N %innum 為輸入的十進制整數%N 為指定轉換后二進制的位數if (innum<1)|(N = 0)%判斷輸入的有效性disp('error!');return;endi=1;n=innum;while(n=0) a(i)=mod(n,2);n=fix(n/2);i=i+1;end for j=1:fix(i/2) t=a(j);a(j)=a(i-j);a(i-j)=t;en

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論