MATLAB故障 - 错误帮助 - 将整数转换为二进制

时间:2015-04-15 14:48:06

标签: matlab

我该如何解决这个问题?我正在编写一个程序将整数转换为二进制,我继续收到错误说:      比纳(100)      “使用idivide时出错> idivide_check(第65行)      至少有一个参数必须属于整数类。

 Error in idivide (line 41)
 idivide_check(a,b);

 Error in bina (line 15)
       d = idivide(d,2);"

这是我的代码:

 function [n] = Bina(d)
% bina is a function that converts integers to binary
% Week 11, Question 18

   n = [];
   if d >=(2^16 -1)       
       fprintf('This number is too big')   
   else
       while d ~= 0
           r=rem(d,2);
           n=[r n];
           d = idivide(d,2);
       end
   end
end

%bina(100)
%bina(1002)
%bina(52601)
%bina(200090)

1 个答案:

答案 0 :(得分:2)

当您将数字输入函数时,MATLAB会自动将结果转换为doubleidivide需要整数。因此,您需要在转换之前对整数类型进行强制转换。 uint8int8uint16int16等内容会有所帮助。 u代表未签名,这意味着您的所有数字都是正数,包括0.如果没有u,这些数据类型为已签名这意味着你的整数可以有负值。看起来您只需要代码中的未签名数据类型,因此请使用任何u变体。此外,您的代码正在检查u >= 2^16 - 1,因此让我们使用uint32来确定。由于您使用的是未签名的数据类型,因此您还希望包含2^16 - 1。这意味着最低有效16位都设置为1,并且由于您的代码(可能)仅查看最低有效16位,因此只需执行u > 2^16 - 1

在任何情况下,只需在命令提示符中调用Bina时执行此操作:

>> Bina(uint32(100))
>> Bina(uint32(1002))
...
...

但是,如果你想避免在函数之外做这个,你可以把这个转换放在你的函数中来隐藏它并使调用更简单...所以像这样:

 function [n] = Bina(d)
% bina is a function that converts integers to binary
% Week 11, Question 18

   %//******** Change
   d = uint32(d);

   n = [];
   if d >(2^16 -1) %// Change
       fprintf('This number is too big')    
   else
       while d ~= 0
           r=rem(d,2);
           n=[r n];
           d = idivide(d,2);
       end
   end
end

现在,您可以在命令提示符下执行此操作:

>> Bina(100)
>> Bina(1002)
...
...