将十进制转换为双精度浮点型数组的二进制,而不是字符串

4
我已经如下所示:

到目前为止,我有:

data = 14
out = dec2bin(data, 4)

这将会得到:

out = 1110

但我希望以这种格式获得二进制数:

out = [1 1 1 0]

感谢您的帮助!
3个回答

6

您需要使用 de2bi 函数,并选择 'left-msb' 选项。

data = 14
out = de2bi(data, 4,'left-msb')

这需要使用通信系统工具箱。或者您可以使用带有以下补充的基本dec2bin的原始方法:

data = 14
out = double( dec2bin(data, 4) ) - 48

out =

     1     1     1     0

是的,但这需要使用通讯包,而我无法使用它。 - Matjaž

1
你正在寻找 de2bibi2de 函数。
这需要使用通信系统工具箱
如果你没有它,你可以在代码开头定义这些函数:
de2bi = @(x) dec2bin(x)>48;
bi2de = @(x) x*2.^(size(x,2)-1:-1:0)';

测试:

dec = 1:10
bin = de2bi(dec)
dec = bi2de(bin)

输出:

dec =

    1    2    3    4    5    6    7    8    9   10

bin =

  0  0  0  1
  0  0  1  0
  0  0  1  1
  0  1  0  0
  0  1  0  1
  0  1  1  0
  0  1  1  1
  1  0  0  0
  1  0  0  1
  1  0  1  0

dec =

    1
    2
    3
    4
    5
    6
    7
    8
    9
   10

附言:如果出于某种原因,您不想使用dec2bin,您可以定义de2bi函数如下:

Matlab/Octave中:

de2bi = @(x)  2.^[(floor(log2(max(x(:)))):-1:1),0];
de2bi = @(x) rem(x(:),2*de2bi(x))>(de2bi(x)-1);

在Octave中(只有在Octave允许匿名函数的默认值时):
默认情况下返回与前面示例相同的结果,但可选的位位置参数是可用的:
de2bi = @(dec,bit=[(1+floor(log2(max(dec(:))))):-1:2, 1]) rem(dec(:),2.^bit)>(2.^(bit-1)-1);

%Call examples:
x=0:10; 
n=3:-1:1;
de2bi(x)
de2bi(x,n)   % returns only the three least significant bits

P.S. 这里提供了更常见的答案:{{link1:dec2base with independent bits/digits calculation}}


0
另一种方法:使用“bitget”函数:
data = 14
out = bitget (data, 4:-1:1)
out =
   1   1   1   0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接