matlab转成⼆进制,⽤MATLAB将10进制整数转化成2进制补码
形式
做了很多的FPGA、DSP、ARM、单⽚机的编程,有很多地⽅都⽤到了将已知的10进制整数例如系数什么的转换成处理器可以识别的2进制补码数据,在⽹上了很久⼀直都没有到,想直接⽤MATLAB解决,可是MATLAB⼜没有提供这样的函数,MATLAB中的dec2bin只能将正的整数转化成2进制,对于需要补码表⽰的负数就⽆能为⼒。
这次,我本来还是不想编这样的程序的,可是数据太多了,⽤计算器⼀个个算实在是来不了了,⽆奈,我今天花了个把⼩时的时间编了这个将10进制的整数转换成2进制补码表⽰的数。为了需要的⼈们,不再去费⼒编写,也为了和⼤家交流到更好的转换⽅式,特此将⾃⼰的程序贴上,和⼤家⼀起探讨。
我深知我写的程序不是最好的,但是可以实现功能,希望对此有兴趣的访客给出宝贵意见,如果有更好的办法请⼤家分享,共同学习,共同进步。
以下⾯的程序为例,做⼀些简单的说明。
程序实现的是将有符号的10进制整数转换成2进制形式,对于负数使⽤的是补码表⽰形式。由于我现在是在做FPGA时⽤到的,⽤的是12位2进制数,所以程序时将整数转换成12位的有符号2进制数。
我们知道,对于12位2进制数,最⾼位为符号位,所能表⽰的整数范围为:-2048~2047.所以我们在转换时⾸先要保证待转换的整数在这个范围内才能正确的转换。
clear all;
a=[1,2,3,4,5,-6,-7,8];%待转换的10进制数
c(8,12)=0;
for i=1:8
if a(i)<0  %判断是否需要使⽤补码表⽰,对于正数补码就是其本⾝,负数才需要变换处理
b=abs(a(i));
d=dec2bin(b,12);
c(i,:)=d;
c(i,:)=c(i,:)-48;%因为MATLAB将转换后的2进制0、1看作是⼀个个ASCII码形式的字符,所以需要作-48处理
%取反运算
for j=12:-1:2
if c(i,j)==1
c(i,j)=0;
else
c(i,j)=1;
end;
end;
%加1运算
if c(i,12)==1
c(i,12)=0;
if c(i,11)==1
2进制转十进制在线计算器c(i,11)=0;
if c(i,10)==1
c(i,10)=0;
if c(i,9)==1
c(i,9)=0
if c(i,8)==1
c(i,8)=0;
if c(i,7)==1
c(i,7)=0;
if c(i,6)==1
c(i,6)=0;
if c(i,5)==1;
c(i,5)=0;
if c(i,4)==1
c(i,4)=0;
if c(i,3)==1
c(i,3)=0;
if c(i,2)==1
c(i,2)=0;
else c(i,2)=1;end; else c(i,3)=1;end; else c(i,4)=1;end; else c(i,5)=1;end; else c(i,6)=1;end; else c(i,7)=1;end; else c(i,8)=1;end; else c(i,9)=1;end; else c(i,10)=1;end; else c(i,11)=1;end; else c(i,12)=1;end; c(i,1)=1;
else
d=dec2bin(a(i),12); c(i,:)=d;
c(i,:)=c(i,:)-48;
end;
end;
注:我使⽤的是MATLAB R2009a版本。我没有在其它版本测试过,估计应该没有问题,因为这⾥没有使⽤到什么特殊函数。各位朋友,我写的⽅法有点笨,不知道哪位要是有更好的⽅法请留⾔,或者Email:
另外对程序有疑义的,或者是不能完全理解的访客同样可以Email:  我们共同讨论学习。 本⼈邮箱24⼩时在线。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。