How to shift elements in a row matrix?

Suppose i have a vector x=[1 1 1 1 0 0 1 1] i want 1 bit shifting such that the output is x1=[0 1 1 1 1 0 0 1] x2=[0 0 1 1 1 1 0 0]
How to do this??

 采纳的回答

KL
KL 2017-10-20
If you have access to Fixed-Point Designer toolbox, you could use bitsll

9 个评论

Actually i tried this function, w=[1 1 1 1 1 1 1 1]; k= bitsll(w,1);
For this output for k is: k =
2 2 2 2 2 2 2 2
This same is for circshift(), bitshift() and so on. How to solve this problem??
Wait! I got you all wrong. Yours simply a vector with 1s and 0s. I misread them as binary. "bit shifting" is not the right word.
Anyway, try the following code,
x=[1 1 1 1 0 0 1 1];
movex = @(z,a) [zeros(1,a) z(1:end-a)];
x1 = movex(x,1)
x2 = movex(x,2)
Thanks a lot. Now it seems more better. Please do help me in 1 point. I did not understand this line : movex = @(z,a) [zeros(1,a) z(1:end-a)];
If i need to do left shift, what must i do?
[zeros(1,a) z(1:end-a)]
if you read this, it adds 'a' number of zeros in the beginning and then neglects 'a' number of elements from z from behind. Do you understand? To do it the opposite way, you just need to modify it a tiny bit. Why don't you try and show me with how you tried?
[z(1:end-a) zeros(1,a)] Is this the way?
Almost, but this time, you'd want to neglect the element from the beǵinning, so it should be,
[z(a+1:end) zeros(1,a)]
On more doubt, x1 dimension is 1:8 but dimension of x2 redues to 1:7 For comparison purposes both dimensions must be same right, so what must be done?
All of it should be of the same size, yes! If you used the code I showed you above, you'd get the result of exactly the same size.

请先登录,再进行评论。

更多回答(1 个)

x1=zeros(size(x));
x1(2:end)=x(1:end-1)

4 个评论

Thanks for the response. But this case cannot be done for all the cases know? How can we generalize this shifting operation??
Then could you please exlain these steps: x1=zeros(size(x)); x1(2:end)=x(1:end-1); By the first step it means adding zeros according to the size of x. But i didnot understand the second step.
i want this code to execute for every iterations.I need to run it for 64 times and i need to display from 1to 64.how could i do this?

请先登录,再进行评论。

类别

标签

Community Treasure Hunt

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

Start Hunting!

Translated by