MATLAB Answers

Wasim Chamaa
0

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

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


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

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?

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

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


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

MATLAB Academy

New to MATLAB?

Learn MATLAB today!