必须将Integer转换为二进制

时间:2015-04-15 10:03:35

标签: matlab

我正在编写一个用户定义的函数来将整数转换为二进制。可以使用该函数转换的最大数字应该是二进制数 16 1 s。如果输入的数字越大,则该函数应显示错误 信息。使用我的代码,我试图根据余数将数字0或1添加到向量x,然后我想反转我的最终向量以显示二进制数字。这就是我所拥有的:

function [b] = bina(d)
% Bina is a function that converts integers to binary

x  = [];
y  = 2;
in = d/2;

if d >=(2^16 -1)
   fprintf('This number is too big')
else
    while in > 1
        if in >= 1
            r = rem(in,y);
            x = [x r]
        end
    end
end

end

1 个答案:

答案 0 :(得分:2)

当你坚持循环时:

x = [];
y = 2;
in = d;


if d >=(2^16 -1)
   fprintf('This number is too big')
else
   ii = 1;
   while in > 0
        r = logical(rem(in,y^ii));
        x = [r x];
        in = in - r*2^(ii-1);
        ii = ii+1;
   end
end

b = x;

您有正确的想法,但您需要在每次迭代时更新while循环中的变量。这主要是in,您需要减去余数。只需将二进制余数存储在变量x中。

您可以使用

检查结果
x = double( dec2bin(d, 16) ) - 48

您也可以使用for循环,通过使用

预先计算迭代次数
find( d < 2.^(1:16),1)

然后

if d >=(2^16 -1)
   fprintf('This number is too big')
else
   for ii = 1:find( d < 2.^(1:16),1)
        r = logical(rem(in,y^ii));
        x = [r x];
        in = in - r*2^(ii-1)
   end
end