matlab提供了一个系统函数dec2bin.docVIP

  • 39
  • 0
  • 约3.75千字
  • 约 4页
  • 2019-10-15 发布于江西
  • 举报
matlab提供了一个系统函数dec2bin,可以用来进行十进制数的二进制转换,不过功能有限! 在matlab中键入 help dec2bin,如下: DEC2BIN Convert decimal integer to a binary string. ??? DEC2BIN(D) returns the binary representation of D as a string. ??? D must be a non-negative integer smaller than 2^52. ? ??? DEC2BIN(D,N) produces a binary representation with at least ??? N bits. ? ??? Example ?????? dec2bin(23) returns 10111 可见,这个函数只能转换整数,对非整数就无能为力了.因此,自己编写了matlab小程序,顺便也贴出来,希望对需要的人能有所帮助!^_^ 1.小数转换为二进制数 输入参数有2个,一个是输入的小数(小于1),一个是指定转换后的二进制位数!程序源码如下: y=dectobin(innum,N) %十进制小数转换为二进制数 %输入参数为innum和N %innum为输入的十进制小数 %N为指定转换后二进制的位数 if (innum1)|(N == 0)%判断输入的有效性 ??? disp(error!); ??? return; end count=0; tempnum=innum; record=zeros(1,N); while(N) ??? count=count+1;%长度小于N ??? if(countN) ??????? N=0; %???????? return; ??? end ??? tempnum=tempnum*2;%小数转换为二进制,乘2取整 ??? if tempnum1 ??????? record(count)=1; ??????? tempnum=tempnum-1;? ??? elseif(tempnum==1) ??????? record(count)=1; ??????? N=0;%stop loop ??? else ?????? record(count)=0;???? ??? end end ?y=record; 2.如果要转换整数,则直接调用matlab的dec2bin即可! 3.对于大于1的非整数,可以利用将其分为整数部分和小数部分的方法来处理: 利用matlab的floor函数可以对输入的数(设为innum)向下取整,然后利用innum-floor(innum)就可以得到小数部分,调用上面的函数就可以得到其二进制表达式! 注意,这里有一个小问题,就是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为整数部分的二进制表达式 %numf为小数部分的二进制表达式 sep=5;%整数和小数部分的分隔符 if(mod(innum,1)==0)%判断输入是否为整数,mod为取余函数 ??? numint=dec2bin(innum); ??? numint=double(numint)-48; ??? numf=zeros(1,N); ??? num=[numint,sep,numf]; ??? return end; %输入为非整数的情况 nint=floor(innum);%整数部分 nf=innum-nint;%小数部分 res_nint=dec2bin(nint); res_nint=double(res_nint)-48; res_nf=dectobin(nf,N); numint=res_nint; numf=res_nf; num=[numint,sep,numf]; 其中的dectobin函数就是最上面的小数转二进制函数! 4.似乎已经大功告成了,是吗?NO,还有一个问题,那就是负数的情况,在这里,我们采用补码的方式,如果输入为正,则二进制表达式不变,如果 为负,则按位取反并加1.因此,需要对上面的函数加上一个负数判断以及补码转换的功能.最终的表示结果可以采用1QN的格式.补码转换部分程序如下: [numo

文档评论(0)

1亿VIP精品文档

相关文档