2013-03-14 3 views
3

У меня есть вектор uint16, который мне нужно перевернуть последние 3 бита каждого номера.Переверните последние 3 бита вектора

Я уже это сделал, но я думаю, что для этого должно быть более простое решение. Вот мой код.

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

Как вы можете видеть, что есть много линий для простой операции, мне интересно, если есть более эффективный способ сделать то же самое.

ответ

5

Я не знаком с MATLAB, но функция bitxor выглядит подходящим для вас, то есть

V = bitxor(V, 7); 
+0

ничего себе, она работала отлично. У меня только один вопрос, почему 7? –

+1

7 равно 111 в двоичном виде, то есть три младших значащих бита :) –

+0

Определенно, этот вид ответа, который я искал, спасибо :) –

Смежные вопросы