【问题标题】:MATLAB: How to discard overflow digits binary addition?MATLAB:如何丢弃溢出数字二进制加法?
【发布时间】:2015-11-04 14:15:56
【问题描述】:

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

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

例如:

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

这给了我:

e =

10001

我如何只得到“0001”?

【问题讨论】:

    标签: matlab binary


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的回答!
    【解决方案2】:

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

    【讨论】:

    • 您好,感谢您的回复。这适用于超过 4 位的数字吗?比如,如果我有 2 个字节要添加,而答案也应该只有一个字节呢?
    • 我试过了,但是我把最后的 4 改成了 8。不过我不明白它是怎么工作的。
    • 要改变的重要部分不是最后4个,而是16个。我在答案中又添加了两个示例。这是否有助于您了解它的工作原理,还是应该添加更详细的说明?
    • 不,仅此而已。非常感谢您的详细解释!干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2015-09-25
    • 1970-01-01
    • 2021-12-22
    • 2021-10-05
    • 2023-02-13
    • 1970-01-01
    相关资源
    最近更新 更多