Which is the easiest method for shifting binary digits to the right?
Show older comments
x1 = {'1' '0' '1' '1' '0' '1' '0' '0' '0' '1' '1' '1' '0' '0' '1' '1'};
x=hex2dec(x1);
Thus in command window,
x =
1
0
1
1
0
1
0
0
0
1
1
1
0
0
1
1
Hence to do shift operation, which is the simplest way?
by one place, 0110100011100110
next, 1101000111001100
next , 1010001110011000
and so on?
Can somebody help me?
Accepted Answer
More Answers (1)
Darsana P M
on 23 Feb 2018
4 Comments
Walter Roberson
on 23 Feb 2018
We do not know what your v is when you start executing the loop.
Suppose that when you began, v was length 16, when i was 1. Then when you get to the tests for lsb, the
v = [v(i:end); 0]
would be v = [v(1:end); 0] which would be [v(1:16); 0] which is going to create something of length 17; likewise for the lsb == 1 branch. So whatever length v is when you start, after the iteration for i=1 is finished, v will be one longer, which will lead to a mismatch of sizes when the bitxor(Z,v) is executed for i=2
Darsana P M
on 23 Feb 2018
Darsana P M
on 23 Feb 2018
Walter Roberson
on 23 Feb 2018
You can get around the first problem by changing
v = [v(i:end); 0]
to
v = [v(i+1:end); 0]
However, this will just postpone the problem one iteration: on the next iteration you will be generating a shorter v (because i has increased) and that shorter v will fail the Z = bitxor(Z,v) since Z did not also get shorter.
I think you need to revise your algorithm. One of the major revisions you need is that you need to document the code -- the purpose of the code, and a description of what you expect each step to accomplish.
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!