matlab中數(shù)制的轉(zhuǎn)換_第1頁(yè)
matlab中數(shù)制的轉(zhuǎn)換_第2頁(yè)
matlab中數(shù)制的轉(zhuǎn)換_第3頁(yè)
matlab中數(shù)制的轉(zhuǎn)換_第4頁(yè)
matlab中數(shù)制的轉(zhuǎn)換_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、clear all close all clc a=inpu t('a=');A=dec2bin(a)%十進(jìn)制數(shù)變成二進(jìn)制數(shù);AA=bin2dec(A)%二進(jìn)制數(shù)變成十進(jìn)制數(shù);十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的matlab實(shí)現(xiàn) matlab提供了一個(gè)系統(tǒng)函數(shù) dec2bin,可以用來(lái)進(jìn)行十進(jìn)制數(shù)的二進(jìn)制轉(zhuǎn)換,不過(guò)功能有限!在 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'可見,這個(gè)函數(shù)只能轉(zhuǎn)換整數(shù),對(duì)非整數(shù)就無(wú)能為力了.因此,自己編寫了 matlab小程序,順便也貼出來(lái),希望對(duì)需要的人能有所幫助!A_A1.小數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)輸入?yún)?shù)有2個(gè),一個(gè)是輸入的小數(shù)(小于1), 一個(gè)是指定轉(zhuǎn)換后的二進(jìn)制位數(shù)

3、!程序源碼如下:y=dectob in (i nnum,N)%十進(jìn)制小數(shù)轉(zhuǎn)換為二進(jìn)制數(shù) %輸入?yún)?shù)為innum和N %innum為輸入的十進(jìn)制小數(shù) %N為指定轉(zhuǎn)換后二進(jìn)制的位數(shù)if (innu m>1)|(N = 0)%判斷輸入的有效性dis p( 'error!');return;endcoun t=0;tempnum=innum;record=zeros(1,N);while(N)count=count+1;%長(zhǎng)度小于 Nif(cou nt>N)N=0;% return;endtempnum=tempnum*2;%小數(shù)轉(zhuǎn)換為二進(jìn)制,乘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. 如果要轉(zhuǎn)換整數(shù) , 則直接調(diào)用 matlab 的 dec2bin 即可 !3. 對(duì)于大于 1 的非整數(shù) ,可以利用將其分為整數(shù)部分和小數(shù)部分的方法來(lái)處理 :利用 matlab 的 floor 函數(shù)可以對(duì)輸入的數(shù) ( 設(shè)為 innum) 向下取整 , 然后利用 innum- floor(innum) 就可以得到小數(shù)部分 ,調(diào)用上面的函數(shù)就可以得到其二進(jìn)制

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

6、式%numf 為小數(shù)部分的二進(jìn)制表達(dá)式sep=5;% 整數(shù)和小數(shù)部分的分隔符if(mod(innum,1)=0)% 判斷輸入是否為整數(shù) ,mod 為取余函數(shù) numint=dec2bin(innum);numint=double(numint)-48;numf=zeros(1,N);num=numint,sep,numf;returnend; %輸入為非整數(shù)的情況 nint=floor(innum);% 整數(shù)部分 nf=innum-nint;% 小數(shù)部分 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 函數(shù)就是最上面的小數(shù)轉(zhuǎn)二進(jìn)制函數(shù)4.似乎已經(jīng)大功告成了 ,是嗎?N0,還有一個(gè)問(wèn)題,那就是負(fù)數(shù)的情況,在這里,我們采用補(bǔ)碼的方式,如果輸入為正 ,則二進(jìn)制表達(dá)式不變 ,如果為負(fù) ,則按位取反并加 1.因此,需要對(duì)上面的 函數(shù)加上一個(gè)負(fù)數(shù)判斷以及補(bǔ)碼轉(zhuǎn)換的功能.最終的表示結(jié)果可以采用 1QN 的格式 . 補(bǔ)碼轉(zhuǎn) 換部分程序如下 :numo,numinto,numfo=conv(numint,numf,flag) %二進(jìn)制數(shù)的補(bǔ)碼表示 % 輸入?yún)?shù)為 numin

8、t 整數(shù)部分的二進(jìn)制表達(dá)式 ,numf 小數(shù)部分二進(jìn)制表達(dá)式 ,flag 負(fù)數(shù)標(biāo)志 % 輸出參數(shù)為 numo 輸入的補(bǔ)碼 ,numinto 整數(shù)部分的補(bǔ)碼 ,numfo 小數(shù)部分的補(bǔ)碼 if (flag=0)numo=0,numint,5,numf;% 正數(shù) numinto=numint;numfo=numf;else% 負(fù)數(shù) ,整數(shù)和小數(shù)部分均進(jìn)行按位取反并加一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;% 結(jié)束循環(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;% 結(jié)束循環(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;% 結(jié)束循環(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. 最后 ,用一個(gè) main 函數(shù)連接以上的子函數(shù) 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) %十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)% 輸入?yún)?shù)為 innum 和 N %innum 為輸入的十進(jìn)制整數(shù)%N 為指定轉(zhuǎn)換后二進(jìn)制的位數(shù)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論