【问题标题】:change dec2bin in matlab to get a logical vector在 matlab 中更改 dec2bin 以获得逻辑向量
【发布时间】:2015-07-23 00:15:29
【问题描述】:

我正在寻找一种在 Matlab 中获取 dec2bin 变量的快速方法,以便它返回一个逻辑变量向量。例如,给定一个数字n=8,输出将为 [1,0,0,0]。 我该怎么做?

【问题讨论】:

标签: matlab


【解决方案1】:

最简单的方法是简单地分解dec2bin返回的二进制表示(这已经是一个字符串!):

dec2bin(n) == '1'

对于n = 8,这将返回一个逻辑向量

1     0     0     0

如果n 是数字向量,这也将起作用。

【讨论】:

  • 谢谢,所有答案都很好,都得到了我的 +1,我接受了这个,因为它是最简单的。
【解决方案2】:

因为字符串 '1' 是 char(49) 而字符串 '0' 是 char(48),你可以使用:

bin = dec2bin(dec) - 48;

这会将结果输出为双精度数组,因为您正在对数组执行算术运算(来自 «dec2bin» 的字符串在 Matlab 中被视为数组)

如果您想将非常高的整数转换为二进制,我建议使用以下代码:

bin = mod(floor(dec.*2.^-(floor(log2(dec)):-1:0)),2);

为了将二进制向量转换为十进制:

dec = sum(bin.*2.^((length(bin)-1):-1:0));

【讨论】:

  • 您为整数推荐的解决方案与整数数据类型不兼容。 bin = dec2bin(dec) - 48; 对于大整数有什么问题?
【解决方案3】:

不要使用dec2bin,而是使用bitget:

bitget(n, fix(log2(n)) + 1:-1:1)

附注: 如果您有一个数字数组,并且希望将其二进制表示为位矩阵,您可能需要查看this related question。

示例

n = 8
b = bitget(n, fix(log2(n)) + 1:-1:1)

这会导致:

b =
     1     0     0     0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2021-06-20
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多