【发布时间】:2015-11-04 14:15:56
【问题描述】:
我想知道当我添加两个二进制数时,MATLAB 是否可以丢弃 MATLAB 中的溢出数字。
我只能找到最少位数的二进制数字,但是如何设置最大位数?
例如:
e = dec2bin(bin2dec('1001') + bin2dec('1000'))
这给了我:
e =
10001
我如何只得到“0001”?
【问题讨论】:
我想知道当我添加两个二进制数时,MATLAB 是否可以丢弃 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
注意:我在 dec2bin 函数中添加了 4 作为附加参数,因此输出将始终为 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
【讨论】: