MATLAB:如何丢弃溢出数字二进制加法?

时间:2015-08-12 06:12:06

标签: matlab binary

我想知道当我添加两个二进制数时,MATLAB中是否可以丢弃MATLAB中的溢出数字。

我只能找到如何获得最少数量的二进制数字,但是如何设置最大位数?

例如:

e = dec2bin(bin2dec('1001') + bin2dec('1000'))

那给了我:

e =

10001

我如何只获得' 0001'?

2 个答案:

答案 0 :(得分:4)

dec2bin将始终为您提供表示数字的最小位数。如果你想保留n最低有效数字,你必须索引字符串并自己抓住它们。

具体来说,如果您只想保留n个最低有效数字,假设您在num中存储了一个基数为10的数字,那么您可以这样做:

out = dec2bin(num);
out = out(end-n+1:end);

请记住,这不执行错误检查。如果n大于字符串中的总位数,则会出现越界错误。我假设你足够聪明,可以使用它并知道你在做什么。

所以对你的例子来说:

e = dec2bin(bin2dec('1001') + bin2dec('1000'));

n = 4,等等:

>> n = 4;
>> e = e(end-n+1:end)

e =

0001

答案 1 :(得分:1)

这是一种更强大(但效率更低,我担心)的方式:你所描述的正是模运算。 4位二进制数是除以0b10000 = 16后的余数。这可以使用MATLAB中的mod函数来完成。

>> e = dec2bin(mod(bin2dec('1001') + bin2dec('1000'),16),4)

e =

0001

注意:我添加4作为dec2bin函数的附加参数,因此输出将始终为4位宽。

这当然可以推广到任何位宽:如果要添加8位数,则需要除0b1'0000'0000 = 256之后的其余部分,例如

>> e = dec2bin(mod(bin2dec('10011001') + bin2dec('10001000'),256),8)

e =

00100001

或者对于较短的数字,例如2位宽,0b100 = 4

>> e = dec2bin(mod(bin2dec('10') + bin2dec('11'),4),2)

e =

01