Hap*_*tal 5 matlab bit-manipulation
给定正整数n,我想在matlab中生成所有可能的n位组合.
例如:如果n = 3,那么答案应该是
000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)
我该怎么做 ?我想将它们存储在矩阵中.我试过了
for n=1:2^4
r(n)=dec2bin(n,5);
end;
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误"在赋值A(:) = B中,A和B中的元素数必须相同.
只需遍历所有整数[0,2^n)
,然后将数字打印为二进制.如果你总是想要n
数字(例如插入前导零),这将看起来像:
for ii=0:2^n-1,
fprintf('%0*s\n', n, dec2bin(ii));
end
Run Code Online (Sandbox Code Playgroud)
编辑:有很多方法可以将结果放在矩阵中.最简单的是使用
x = dec2bin(0:2^n-1);
Run Code Online (Sandbox Code Playgroud)
这将产生一种n
类型的2^n
矩阵char
.每行是一个位串.
如果你真的想在每一行中存储字符串,你可以这样做:
x = cell(1, 2^n);
for ii=0:2^n-1,
x{ii} = dec2bin(ii);
end
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在寻找有效的处理,您应该记住整数已经以二进制形式存储在内存中!所以,矢量:
x = 0 : 2^n-1;
Run Code Online (Sandbox Code Playgroud)
以最高内存效率和CPU效率的方式包含二进制模式.唯一的权衡是使用这种紧凑的表示法无法表示超过32位的模式.