Which is the easiest method for shifting binary digits to the right?
Mostra commenti meno recenti
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?
Risposta accettata
Più risposte (1)
Darsana P M
il 23 Feb 2018
4 Commenti
Walter Roberson
il 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
il 23 Feb 2018
Darsana P M
il 23 Feb 2018
Walter Roberson
il 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.
Categorie
Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!