Matlab 中的数制转换
Number-system conversion in Matlab
我为 MatLab 编写了以下程序,将数字从十进制系统转换为其他系统,基数从 2(二进制)到 16(十六进制)。当程序从基数 10 开始转换为系统时,我遇到了问题。在这种情况下,余数必须以某种方式编写,例如 10=A
、11=B
等等。怎么可能做到?我应该为此目的使用 switch-case 吗?谢谢!
clc
clear all
dec = input('dec=');
n = input('select number system n=');
if n>=2 && n<=16
i = 0;
p=dec;
while p>0
dec=p;
i = i + 1;
p = fix(dec/n);
r = mod(dec, n);
base(i) = num2str(r);
end
base = fliplr(base);
disp(['base=' num2str(base)]);
else
disp('error');
end
此函数作为内置函数存在 dec2base
。如果您通过
查看其源代码
edit dec2base
您将看到此函数首先构建一个数字向量,然后使用它对字符数组进行索引 symbols = '0123456789ABCDEFG...'
。您可以使用相同的方法代替 num2str
。 base(i) = symbols(r+1)
应该这样做。
顺便说一句:
- 在
disp
行中,您正在对已经是字符串的内容使用 num2str
。
- 您实际上可以通过
error('Choose base b as 2<=b<=16')
. 生成错误消息,而不是使用 disp('error')
- 您可以使用
base(end+1) = ...
而不是 base(i)
来删除变量 i
。
我为 MatLab 编写了以下程序,将数字从十进制系统转换为其他系统,基数从 2(二进制)到 16(十六进制)。当程序从基数 10 开始转换为系统时,我遇到了问题。在这种情况下,余数必须以某种方式编写,例如 10=A
、11=B
等等。怎么可能做到?我应该为此目的使用 switch-case 吗?谢谢!
clc
clear all
dec = input('dec=');
n = input('select number system n=');
if n>=2 && n<=16
i = 0;
p=dec;
while p>0
dec=p;
i = i + 1;
p = fix(dec/n);
r = mod(dec, n);
base(i) = num2str(r);
end
base = fliplr(base);
disp(['base=' num2str(base)]);
else
disp('error');
end
此函数作为内置函数存在 dec2base
。如果您通过
edit dec2base
您将看到此函数首先构建一个数字向量,然后使用它对字符数组进行索引 symbols = '0123456789ABCDEFG...'
。您可以使用相同的方法代替 num2str
。 base(i) = symbols(r+1)
应该这样做。
顺便说一句:
- 在
disp
行中,您正在对已经是字符串的内容使用num2str
。 - 您实际上可以通过
error('Choose base b as 2<=b<=16')
. 生成错误消息,而不是使用 - 您可以使用
base(end+1) = ...
而不是base(i)
来删除变量i
。
disp('error')