How to remove MSB bit from a binary number?

suppose i have an cell array 'c' of 1*256 size.
let c(1)=10010000
i want
p1= 10010000;
p2=0010000;
p3=010000;
p4=10000;
p5=0000;
p6=000;
p7=00;
p8=0;
it means in each step the MSB should be removed.. Thank you..plz any body suggest...

2 Comments

What is the the data type?
it is actually uint8 .but i have converted it into char..so we can do in both ways

Sign in to comment.

 Accepted Answer

cellfun(@(b) arrayfun(@(idx) b(idx:end), 1:length(b), 'uniform', 0), c, 'uniform', 0)

4 Comments

For the uint8 case:
cellfun(@(b) mod(b, 2.^(8:1)-1), c, 'uniform', 0)
For the uint8 case, I'd use:
cellfun(@(b) bitshift(b, -(1:8)), c, 'UniformOutput', false);
There are plenty of functions in matlab to manipulate bits of numbers.
>> a=imread('f.jpg');
>> b=imresize(a,[16 16]);
>> d = cellstr(dec2bin(b,8))';
>> for i = 1 : rows
for j = 1 : columns
suppose d{i,j}==11000001
i want d{i,j} should be decreased to 7 bit next 6 bit next 5 bit upto 2 bit.i.e. d(i,j)=1000001; d(i,j)=000001; d(i,j)=00001; d(i,j)=0001; d(i,j)=001;d(i,j)=01;..i.e at each step msb bits should be removed.
That is what my first code does provided you start with cell array of string

Sign in to comment.

More Answers (1)

b = imresize(imread('f.jpg'), [16 1]);
d = arrayun(@(s) bitshift(b, -s), 1:8, 'UniformOutput', false);
d{1} is all the values of b shifted by 1 bit, d{2} is all the values of b shifted by 2 bits, ... d{8} is all the values of b shifted by 8 bits.
There is absolutely no point in converting numbers in strings of 0 and 1 to manipulate bits Computers are much better at manipulating bits of numbers than they are at manipulating characters of strings.
You can always convert the d{i} to strings if you really wish to.

Categories

Find more on Convert Image Type in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!