Extracting representative bits for an integer and doing the reverse.

3 ビュー (過去 30 日間)
Digitalsd
Digitalsd 2012 年 11 月 18 日
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?

採用された回答

Digitalsd
Digitalsd 2012 年 11 月 20 日
編集済み: Digitalsd 2012 年 11 月 20 日
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);

その他の回答 (1 件)

Image Analyst
Image Analyst 2012 年 11 月 18 日
編集済み: Image Analyst 2012 年 11 月 18 日
% 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 件のコメント
Walter Roberson
Walter Roberson 2012 年 11 月 19 日
I'm pretty sure that the poster is trying to do base 4 encoding / decoding.
Digitalsd
Digitalsd 2012 年 11 月 19 日
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

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by