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
我想知道当我添加两个二进制数时,是否可以在 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