## Extracting representative bits for an integer and doing the reverse.

on 18 Nov 2012

### Wasim Chamaa (view profile)

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?

## Products

No products are associated with this question.

### Wasim Chamaa (view profile)

on 20 Nov 2012
Edited by Wasim Chamaa

### Wasim Chamaa (view profile)

on 20 Nov 2012

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);```

### Image Analyst (view profile)

on 18 Nov 2012
Edited by Image Analyst

### Image Analyst (view profile)

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?

Image Analyst

### Image Analyst (view profile)

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

### Walter Roberson (view profile)

on 19 Nov 2012

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

Wasim Chamaa

### Wasim Chamaa (view profile)

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

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