【问题标题】:Convert decimal to binary in Matlab?在 Matlab 中将十进制转换为二进制?
【发布时间】:2016-03-16 17:01:24
【问题描述】:

我正在将基数为 10 的数字转换为基数为 2 的数字,并指定我想用来表示这些基数为 10 的数字的位数。

这是我的负数代码:

function output = DTB(decimal,binary)
if decimal < 0
    smallestNum = -(2^(bits-1));

    if decimal < smallestNum
        error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
        output = '';
    end

    output = '1';
    bits = bits - 1;

    if smallestNum == decimal
        while bits ~= 0
            output = [output,'0'];
            bits = bits - 1;
        end
    end

    num = smallestNum;
    while num ~= decimal
        num = smallestNum + 2^(bits-1);
        if num > decimal
            output = [output,'0'];
        else
            output = [output,'1'];
            smallestNum = smallestNum + 2^(bits-1);
        end
        bits = bits - 1;
    end

    while bits ~= 0
        output = [output,'0'];
        bits = bits - 1;
    end
end

这很好用。我遇到的问题(奇怪的是,因为从正小数到二进制应该更容易)是正整数。这应该只是对负数算法的一个小调整,对吧?例如,在decimal = 8 和bits = 6 的情况下,正数部分不起作用(它不适用于 2 的不同幂)。怎么了?

这是正整数的代码:

if decimal > 0
    largestNum = (2^(bits-1))-1;

    if decimal > largestNum
        error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
        output = '';
    end

    % first spot must be zero to show it's a positive number
    output = '0';
    bits = bits - 1;

    largestNum = largestNum + 1;
    num = largestNum;

    while num ~= decimal
        num = largestNum - 2^(bits-1);
        if num > decimal
            output = [output,'0'];
        end
        if num <= decimal
            output = [output,'1'];
            largestNum = largestNum - 2^(bits-1);
        end
        bits = bits - 1;
    end

    while bits ~= 0
        output = [output,'0'];
        bits = bits - 1;
    end

【问题讨论】:

    标签: matlab function binary decimal


    【解决方案1】:

    当你在输出数组中放一个零时,你需要减少最大的num,因为你基本上是从一个全1的二进制数组开始的(即最大的num)。这段代码对我有用:

    if decimal > 0
    largestNum = (2^(bits-1))-1;
    
    if decimal > largestNum
        error('%d cannot be represented in %d bits. Increase the number of bits. ',decimal,bits);
        output = '';
    end
    
    % first spot must be zero to show it\'s a positive number
    output = '0';
    bits = bits - 1;
    
    largestNum = largestNum + 1;
    num = largestNum;
    
    while num ~= decimal
        num = largestNum - 2^(bits-1);
        if num > decimal
            output = [output,'0'];
            largestNum = largestNum - 2^(bits-1);
        end
        if num <= decimal
            output = [output,'1'];
    
        end
        bits = bits - 1;
    end
    
    while bits ~= 0
        output = [output,'0'];
        bits = bits - 1;
    end
    end
    

    我不确定这是做什么用的,但我强烈建议使用内置的dec2bin 来执行此操作。

    【讨论】:

      【解决方案2】:

      你可以在matlab中使用这个脚本:

      a=[1 2 3 4;-2 -4 3 4;7 8 9 4];
      
      [c,v]=size(a);
      
      n3=c*v;
      
      word_len=5;%with bits of binary  word
      
      data = reshape(a', n3, 1);
      
      databin= fi(data,1,5);
      
      h=bin(databin)%result
      

      【讨论】:

      • 没有。这真是太糟了。 fi 是定点工具箱的一部分,不适合通用解决方案。公认的解决方案不依赖于任何工具箱,因此它最适用于现有的任何 MATLAB 发行版。
      猜你喜欢
      • 2017-08-07
      • 2015-10-27
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2011-07-09
      • 2012-12-26
      相关资源
      最近更新 更多