问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

matlab 编写一个程序实现十进制数转换为二进制数?

发布网友 发布时间:2022-04-30 22:47

我来回答

3个回答

热心网友 时间:2022-06-19 20:25

十进制数转换为二进制数的matlab实现
收藏 11337 次阅读 | 4 个评论 2007-08-12 03:02
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) proces 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 (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;
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,numinto,numfo]=conv(numint,numf,flag)
%二进制数的补码表示
%输入参数为numint整数部分的二进制表达式,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:l

if num(i)==1%按位取反
num(i)=0;
else
num(i)=1;
end

end
%取反后加一
temp_l=l;
while(temp_l~=0)
if num(temp_l)==0%最低位为0
num(temp_l)=1;
temp_l=0;%结束循环
else
num(temp_l)=0;
temp_l=temp_l-1;
end
end
% l1=length(numint);
% for i=1:l1
%
% if numint(i)==1%按位取反
% numint(i)=0;
% else
% numint(i)=1;
% end
%
% end
%
% l2=length(numf);
% for i=1:l2
%
% if numf(i)==1%按位取反
% numf(i)=0;
% else
% numf(i)=1;
% end
%
% end
%
% %取反后加一
% temp_l1=l1;
% while(temp_l1~=0)
% if numint(temp_l1)==0%最低位为0
% numint(temp_l1)=1;
% temp_l1=0;%结束循环
% else
% numint(temp_l1)=0;
% temp_l1=temp_l1-1;
% end
% end
%
% %取反后加一
% temp_l2=l2;
% while(temp_l2~=0)
% if numf(temp_l2)==0%最低位为0
% numf(temp_l2)=1;
% temp_l2=0;%结束循环
% else
% numf(temp_l2)=0;
% temp_l2=temp_l2-1;
% end
numinto=num(1:l1);
numfo=num(l1+1:l);
% numinto=numint;
% numfo=numf;
numo=[1,numinto,5,numfo];
end

热心网友 时间:2022-06-19 20:25

clear all
close all
clc
a=input('a=');
A=dec2bin(a)%十进制数变成二进制数;
AA=bin2dec(A)%二进制数变成十进制数;

热心网友 时间:2022-06-19 20:26

a=’hello’; b=dec2bin(a,8); c=b’; d=c(:); e=bin2dec(d);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
江西蓝天学院和赣江职业技术学院哪个好? 江西有什么好的中专学校 什么是单点登录(SSO),以及单点登录的实现流程 前端实现单点登录(SSO) 前端单点登录如何实现 面试官:来说说单点登录的三种实现方式 为什么很多人不买哈弗H9 座机如何开通国内长途 座机如何申请 辽宁省出租车手续怎么办? “三农”问题具体指什么?哪位有识之士可告知,感谢!!! matlab 怎么样将十进制小数转化为二进制? UEFI下,如何全自动的使用GHOST恢复U盘下镜像到第一分区? 用matlab编程,如何将一堆十进制数转化成二进制数输出 变压器端子箱接地铜排接的作用? 十进制转换成二进制的matlab程序,需要逐位显示转化结果,求高手帮忙!做的好给加分~ 什么叫变压器端子箱 控制变压器初级电压接线端有3个端子0 220 380 这样要怎样接线啊 变压器接线方式如何选取,不同接线方式的适用条件是怎样的,请专家解答下。谢谢! 数博会对贵阳有什么意义? 电源 变压器如何接线? 变压器局部放电实验方法? 短信验证码接收不到 为什么我的手机接不到验证码,我的是联通大王卡啊? 绿动转债会跌停吗? 绿色动力股票股票当天可以卖出吗 绿色动力多少股配债 股票绿色动力二百股能配一首吗 N绿动转是什么 绿色动力股票值多少钱 matlab利用向量和函数文件将十进制正整数转化成二进制并直接在函数中输出 十进制转二进制算法( 使用matlab 软件实现) 急! matlab中如何将十进制的小数转换为二进制,比如 -5.8091和11.6246 用matlab做一简单的十进制数与二进制十六进制数之间的转换程序?急急急。谢谢! 已有在matlab中负数十进制转为二进制的代码 求二进制转回十进制负数的代码 五年级上册语文第5单元作文怎么写 五年级上册第五单元作文,要自己写的,急 五年级上册第五单元作文碳烧排骨该怎么写? 五年级第五单元上册作文 我国国家制度和国家治理体系的显著优势之一,是坚持共同的什么,弘扬中华传统优秀文化? 怎样把歌曲下载成mp3的格式? 如何弘扬中华传统文化和革命文化,社会主义先进文化 乘风破浪的姐姐主题曲 反映中华优秀传统文化,革命文化,社会主义先进文化的成语? 新民主主义革命文化纲领与社会主义文化纲领有何异同 我国古代,近现代和当代有社会影响力的体现中华优秀传统文化,*文化和社会主义先进文化的经典诗文,重_百度问一问 《乘风破浪的姐姐》主题曲是谁演唱的? 如何评价《乘风破浪》主题曲男子汉宣言之《乘风破浪歌》 在我国*和社会主义建设年代,先进文化都发挥了不可替代的重大作用,请举例说明 求赵雅芝处女作《乘风破浪》主题曲的歌词