我该如何解决这个问题?我正在编写一个程序将整数转换为二进制,我继续收到错误说: 比纳(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)
答案 0 :(得分:2)
当您将数字输入函数时,MATLAB会自动将结果转换为double
。 idivide
需要整数。因此,您需要在转换之前对整数类型进行强制转换。 uint8
,int8
,uint16
,int16
等内容会有所帮助。 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)
...
...