Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Extracting representative bits for an integer and doing the reverse.

Asked by Wasim Chamaa on 18 Nov 2012

I have an integer value and want to extract all its representative bits in two-bit blocks; each block consists of two bits. Reversely, I want to build an integer value from given two-bit blocks. What is the more optimized code performing these tasks?

0 Comments

Wasim Chamaa

Products

No products are associated with this question.

2 Answers

Answer by Wasim Chamaa on 20 Nov 2012
Edited by Wasim Chamaa on 20 Nov 2012
Accepted answer

For Positive integer Values,By the use of bitwise operations, and,or,shift:

 % Decomposition:
 a=4235; % any Positive Integer <= 65535 : Up to 2byte.
 a1=a;
 block=[0,0,0,0,0,0,0,0];
 for k=1:8
    block(k) = bitand(a1, 3);
    a1 = bitshift(a1, -2);
 end
 % Reversely: The Composition
 % We have the resulted block.
 b=0; % Integer
 for k=1:8
    b = bitshift(b, +2);   
    b = bitor(b,block(9-k));
 end
 comp=isequal(a,b);

0 Comments

Wasim Chamaa
Answer by Image Analyst on 18 Nov 2012
Edited by Image Analyst on 18 Nov 2012
% Say, for 171 = AB = 10101011.
str = dec2bin(171)
theBlocks = reshape(str, [2 4])'

In the command window:

str =
10101011
theBlocks =
10
10
10
11

To reconstruct from theBlocks:

reconstructedString = reshape(theBlocks', [1 8])
reconstructedInteger = bin2dec(reconstructedString)

In the command window:

reconstructedString =
10101011
reconstructedInteger =
   171

Is that what you mean?

8 Comments

Image Analyst on 19 Nov 2012

How about smallNumber = mod(yourBigNumber, 3). That will give 0-3 for any integer. I totally agree with Jan that you're not being clear about what you want, hence my answer now being totally different than what I first gave. Why don't you give a question that can be answered the very first time without us guessing and trying numerous times to help you?

Walter Roberson on 19 Nov 2012

I'm pretty sure that the poster is trying to do base 4 encoding / decoding.

Wasim Chamaa on 19 Nov 2012

The answer of image analyst was close to what I wanted but it gives the smaller elements in string type: ‘00’,’01’,’10’,’11’. Instead I need these elements as integer: 0, 1, 2, and 3. In other words I want to decompose the integer to smaller representative integers each has two bits, and from these small integers I can reconstruct the original big integer. To Walter Roberson, it is positive integer. Anyway, I’ve written and tested a code doing exactly what I need,it is done using the bitwise operations, and,or,shift:

% Decomposition:
a=4235; % any Integer <= 65535 : Up to 2byte.
a1=a;
block=[0,0,0,0,0,0,0,0];
for k=1:8
   block(k) = bitand(a1, 3);
   a1 = bitshift(a1, -2);
end
% Reversely: The Composition:
% We have the resulted block.
 b=0; % Integer
for k=1:8
   b = bitshift(b, +2);   
   b = bitor(b,block(9-k));
end
 comp=isequal(a,b);

Best Regards

Image Analyst

Contact us