【发布时间】:2015-07-23 00:15:29
【问题描述】:
我正在寻找一种在 Matlab 中获取 dec2bin 变量的快速方法,以便它返回一个逻辑变量向量。例如,给定一个数字n=8,输出将为 [1,0,0,0]。
我该怎么做?
【问题讨论】:
标签: matlab
我正在寻找一种在 Matlab 中获取 dec2bin 变量的快速方法,以便它返回一个逻辑变量向量。例如,给定一个数字n=8,输出将为 [1,0,0,0]。
我该怎么做?
【问题讨论】:
标签: matlab
最简单的方法是简单地分解dec2bin返回的二进制表示(这已经是一个字符串!):
dec2bin(n) == '1'
对于n = 8,这将返回一个逻辑向量
1 0 0 0
如果n 是数字向量,这也将起作用。
【讨论】:
因为字符串 '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; 对于大整数有什么问题?
不要使用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
【讨论】: