加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab实现十进制小数转换为二进制

(2014-01-21 18:51:58)
标签:

it

分类: MATLAB学习
这段程序源于网上
********小于1的小数转换为二进制***********
function y=dectobin(innum,N)
%十进制小数转换为二进制数
%输入参数为innum和N
%innum为输入的十进制小数
%N为指定转换后二进制的位数
if (innum>1)|(N == 0)%判断输入的有效性 
    disp('error!');
    return;
end
count=0;
tempnum=innum;
record=zeros(1,N);
while(N)
    count=count+1;%长度小于N
    if(count>N)
        N=0;
%         return;
    end
    tempnum=tempnum*2;%小数转换为二进制,乘2取整
    if tempnum>1
        record(count)=1;
        tempnum=tempnum-1;  
    elseif(tempnum==1)
        record(count)=1;
        N=0;%stop loop
    else
       record(count)=0;     
    end
end
y=record;
**********正小数转换为二进制数***********
function [num,numint,numf]=xiaoshu2bin(innum,N)
%十进制数转换为二进制数
%输入为十进制数innum,以及小数部分的位数N
%输出为三个参数num,numint,numf
%num为输出的二进制形式
%numint为整数部分的二进制表达式
%numf为小数部分的二进制表达式
sep='.';%整数和小数部分的分隔符
clc;
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];
num=strcat(num2str(numint),'.');
num=strcat(num,num2str(numf));
%其中的dectobin函数就是小于1的小数转二进制函数

如果是负数,则需转换为二进制补码,符号位为1,其他位在转换为二进制后还要按位取反再加1,按位取反可以用异或xor实现(和1异或)。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有