【问题标题】:Have to convert Integer to binary必须将整数转换为二进制
【发布时间】:2015-04-15 19:00:48
【问题描述】:

我正在编写一个用户定义的函数来将整数转换为二进制。可以用函数转换的最大数应该是二进制数 16 1 秒。如果输入较大的数字作为 d,该函数应显示错误 信息。使用我的代码,我试图根据余数将数字 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

【问题讨论】:

标签: matlab


【解决方案1】:

当你坚持循环时:

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

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2017-07-13
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2014-03-13
    • 2021-11-03
    相关资源
    最近更新 更多