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

MATLAB: How to discard overflow digits binary addition?

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

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

例如:

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

这给了我:

e =

10001

如何只得到“0001”?

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

这是一种更健壮(但我担心效率较低)的方法:您描述的正是模运算。 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