MATLAB: Need ‘for loop’ to check 1:32 bit

bitwise functionfor loop

I have 606,774(1 row means event no.1) event number in 8 column(these are 32 bit values), these numbers are in decimal as shown in below. a=(strVals(1:10,1:8))
a =
0 0 0 0 0 3 0 0
0 0 0 0 0 576 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 48
0 0 1536 8192 0 0 0 0
0 0 0 0 0 0 50331648 0
0 0 0 0 0 6291456 0 0
0 0 0 67108864 0 0 256 0
0 0 0 768 0 0 0 0
0 0 0 4194304 0 0 0 0
This is only for 1:10 event,(I have 606,774 event no.). What I want here is, how to convert these number into binary at same time and how can I check 1:32 bit at once. I have use "bitget" function but I only able to get separately, may I need 'for loop' to get at once?1:32 bit means 1 through 32 bit of binary number(convert above decimal numbers into binary), so I need to know how to write a "for loop" to check each bit one at a time. Like >> bitget(a,1) command checks if the first (smallest/lowest) bit is set for all these numbers at the same time.
Please help me, thanks in advance.

Best Answer

Since you are looking for which channels were hit across all stretchers for all events, then you will need two for loops for the looping of the data, and an additional inner for loop to iterate over the 32 channels. Something like
[m,n] = size(a);
for event=1:m
for stretcher=1:n
% do stuff
end
end
If you are only interested in those stretchers from some event that has a hit channel, then you can exclude all the 0's (since no hits on any channel) and the "do stuff" from above becomes
val = a(event,stretcher);
if val~=0
% now loop over the 32 channels
bitMask = 1;
channelsHit = cast(zeros(1,32),'uint8');
atHit = 0;
% iterate over each channel
for k=1:32
if bitand(val,bitMask)
% is one so a hit on channel k!
atHit = atHit+1;
channelsHit(atHit) = k;
end
% bit shift the mask by one
bitMask=bitshift(bitMask,1);
end
% remove empty elements from array and so we have a variable sized
% array of hit channels for the (event, stretcher) pair
channelsHit = channelsHit(1:atHit);
end
Once you have your list of hit channels for the (event, stretcher) pair, you can save those three pieces of information to a cell array for later analysis.
Related Question