필터 지우기
필터 지우기

Flip last 3 bits of vector

조회 수: 1 (최근 30일)
Jorge Zapata
Jorge Zapata 2013년 3월 14일
I have a uint16 vector which I need to flip the last 3 bits of every number.
I already have done this but I think there must be an easier solution to do this. Here is my code.
%Turn the vector to binary
V_bin = dec2bin(V,16);
for i=1:length(V)
%Get the last 3 bits
tmp = V_bin(14:end);
%Convert the string to decimal
tmpdec = bin2dec(tmp);
%Do the flip
tmpflip = bitcmp(uint8(tmpdec));
%Flipped to binary
tmpbin = dec2bin(tmpflip);
%Replace the flipped bits in the original string
V_bin(14:end) = tmpbin(6:end);
end
V = bin2dec(V_bin);
As you can see there are a lot of lines for a simple operation, I wonder if there is a more efficient method to do the same. Thanks

채택된 답변

Teja Muppirala
Teja Muppirala 2013년 3월 14일
You can use BITXOR,
V = uint16( round(65535*rand(5,1)) );
V2 = bitxor(V,1+2+4); % 1+2+4 = 7 = 0000000000000111
dec2bin(V)
dec2bin(V2)
  댓글 수: 2
Jan
Jan 2013년 3월 14일
+1, I cannot stress enough how much better this is compared to the dec2bin conversion tricks. Converting numerical data to strings for a manipulation is too indirect to be efficient.
Jorge Zapata
Jorge Zapata 2013년 3월 14일
In fact strings operations affect performance so your answer is what I was looking for, thanks

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by