how to do left and right bit rotation

13 visualizaciones (últimos 30 días)
sadiqa ilyas
sadiqa ilyas el 5 de Sept. de 2019
Comentada: sadiqa ilyas el 6 de Sept. de 2019
Hi. I am trying to convert a matrix into 8 bit binary and then want to apply different bit rotations in different rows.e.g for row 1, 2bits will be rotated right and for row 2, 3 bits right rotation.
M=[2 32 45;3 54 12 98;134 245 69];
m1=(str2num(dec2bin(M)));
m=reshape(m1,[3 3]);
mm=m(:);
disp(dec2bin(bit_rotate(m,1),8))% error in this line.
%bitrotation function
function data = bit_rotate(data,nBits)
dataBits = log2(double(intmax(class(data)))+1); %# Number of bits in data
nBits = rem(nBits,dataBits); %# No need to rotate by dataBits bits or more
if nBits == 0 %# No bit rotation needed, just return
return
end
shiftedData = bitshift(data,nBits); %# Bit shift the data
lostData = bitxor(data,bitshift(shiftedData,-nBits)); %# Find the lost bits
rotatedData = bitshift(lostData,nBits-sign(nBits)*dataBits); %# Rotate them
data = shiftedData+rotatedData; %# Add the rotated bits to the shifted bits
end
  6 comentarios
Walter Roberson
Walter Roberson el 5 de Sept. de 2019
It is probably waiting for you to define a function rotate_left_1 according to the algorithm I suggested
sadiqa ilyas
sadiqa ilyas el 6 de Sept. de 2019
thanks

Iniciar sesión para comentar.

Respuesta aceptada

Bruno Luong
Bruno Luong el 5 de Sept. de 2019
Editada: Bruno Luong el 5 de Sept. de 2019
% Test example, 166 corresponds to your example of binary '10100110'
M=[2 32 45;
3 54 166;
134 245 69]
rotfun = @(M,r) reshape(str2num(circshift(dec2bin(M,8),-r,2)),size(M))
rotfun(M,0)
rotfun(M,3)
Results:
ans =
10 100000 101101
11 110110 10100110
10000110 11110101 1000101
ans =
10000 1 1101001
11000 10110001 110101
110100 10101111 101010

Más respuestas (0)

Categorías

Más información sobre Geoscience en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by