我编写了以下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');
有关删除此错误的建议吗?我做错了什么
答案 0 :(得分:0)
您的代码存在许多问题:
my_uint32 = uint32(rand(1,80))
不会生成随机整数。它会生成一个1x80的uint32数组,其值为0或1,具体取决于rand
的结果是否返回高于或低于.5
的双倍。[0,0,0,0,0,0,0,1]
。您不能将矢量指定给单个标量的矩阵中的点。 sum
是matlab中的标准函数。虽然你可以将它用作变量,但这种风格很差,可能会令人困惑。
`
我会使用按位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?