我想知道当我添加两个二进制数时,MATLAB中是否可以丢弃MATLAB中的溢出数字。
我只能找到如何获得最少数量的二进制数字,但是如何设置最大位数?
例如:
e = dec2bin(bin2dec('1001') + bin2dec('1000'))
那给了我:
e =
10001
我如何只获得' 0001'?
答案 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