二进制数向量的有效位混洗

Seb*_*ian 5 arrays matlab bit-manipulation vectorization

我已经记录了包含位序列向量的数据,我想有效地重新排列.数据向量中的一个值可能如下所示:

bit0, bit1, bit2, ... bit7
Run Code Online (Sandbox Code Playgroud)

我想按照这个顺序重新安排这个位序列:

bit0, bit7, bit1, bit6, bit2, bit5, bit3, bit4
Run Code Online (Sandbox Code Playgroud)

如果我只有一个值,这将很好地通过:

sum(uint32(bitset(0,1:8,bitget(uint32(X), [1 8 2 7 3 6 4 5]))))
Run Code Online (Sandbox Code Playgroud)

不幸的是,bitset和bitget不能处理位序列的向量.由于我有一个相当大的数据集,我对有效的解决方案感兴趣.

任何帮助将不胜感激,谢谢!

Dan*_*iel 3

dec2bin并且bin2dec可以处理向量,您可以一次输入所有数字并排列矩阵:

input=1:23;
pattern = [1 8 2 7 3 6 4 5];
bit=dec2bin(input(:),numel(pattern));
if size(bit,2)>numel(pattern)
    warning('input numbers to large for pattern, leading bits will be cut off')
end
output=bin2dec(bit(:,pattern));
Run Code Online (Sandbox Code Playgroud)

如果可以的话,我会用de2biandbi2de来代替。

  • 请注意,“de2bi”的位顺序与“dec2bin”的位顺序相反 (2认同)