为数组中的每个元素获得8个较低有效位

时间:2015-11-20 09:00:15

标签: matlab

我编写了以下matlab代码,为1D数组中的每个元素获取8个lsb位。

clc;
clear all;
close all;

sum=uint32(rand(1,80));
sumf=uint8(zeros(1,80));

for i=1:80        
    sumf(1,i)=bitget(sum(1,i),8:-1:1,'uint32');
end

然而,当我跑步时,我得到以下错误

Assignment has more non-singleton rhs dimensions than
non-singleton subscripts

Error in Untitled2 (line 11)
    sumf(1,i)=bitget(sum(1,i),8:-1:1,'uint32');

有关删除此错误的建议吗?我做错了什么

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题:

  1. my_uint32 = uint32(rand(1,80))不会生成随机整数。它会生成一个1x80的uint32数组,其值为0或1,具体取决于rand的结果是否返回高于或低于.5的双倍。
  2. 您正在尝试将1x8向量分配给uint8。在您的情况下,bitget返回uint32的向量,例如:[0,0,0,0,0,0,0,1]。您不能将矢量指定给单个标量的矩阵中的点。
  3. sum是matlab中的标准函数。虽然你可以将它用作变量,但这种风格很差,可能会令人困惑。

    `

  4. 我会使用按位and来提取8个最低有效数字:

    random_uint32s  = uint32(floor(rand(1, 80) * (2^32 - 1)));
    lsd8 = bitand(random_uint32s, 255); %255 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128
    
    my_uint8 = uint8(lsd8); % if you really want it in a uint8 type for some weird reason?