How does the cycle index control the loop

F

fl

Hi,

I do not understand the index variable 'j' function below. How deos j
control to end of the for loop?
It cycles 8 times from step tracking. When does j equal 0, it ends the
loop. I do not understand why it ends when j==0.

Thanks in advance



..............
for (j=0x80; j; j>>=1) {
bit = crc & crchighbit;
crc<<= 1;
if (c & j)
crc|= 1;
if (bit)
crc^= polynom;
}
 
F

fl

Hi,

I do not understand the index variable 'j' function below. How deos j
control to end of the for loop?
It cycles 8 times from step tracking. When does j equal 0, it ends the
loop. I do not understand why it ends when j==0.

Thanks in advance

.............
for (j=0x80; j; j>>=1) {
 bit = crc & crchighbit;
 crc<<= 1;
 if (c & j)
    crc|= 1;
 if (bit)
    crc^= polynom;



}- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -

The second item 'j' in the for loop means it is non-zero. This non-
zero as the termination criteria? Thanks.
 
L

Lew Pitcher

Hi,

I do not understand the index variable 'j' function below. How deos j
control to end of the for loop?
It cycles 8 times from step tracking. When does j equal 0, it ends the
loop. I do not understand why it ends when j==0.

Thanks in advance

You can read the statement
for (j=0x80; j; j>>=1) { /* stuff */ }

as
initialize j to 0x80
while j is not zero

do some stuff

drop the low-order bit of j, shift the remaining bits right by 1 bit,
and fill in the vacated high order bit with a 0

go back to the top of the loop.


If you walk the loop through:
j is set to 0x80, j is not zero, the loop body is run, and j becomes 0x40
j is 0x40, j is not zero, the loop body is run, and j becomes 0x20
j is 0x20, j is not zero, the loop body is run, and j becomes 0x10
j is 0x10, j is not zero, the loop body is run, and j becomes 0x08
j is 0x08, j is not zero, the loop body is run, and j becomes 0x04
j is 0x04, j is not zero, the loop body is run, and j becomes 0x02
j is 0x02, j is not zero, the loop body is run, and j becomes 0x01
j is 0x01, j is not zero, the loop body is run, and j becomes 0x00
j is 0x00, j is zero, the loop terminates

That's 8 times that j is not zero, and the loop body is executed.

HTH
 
K

Kleuskes & Moos

The second item 'j' in the for loop means it is non-zero. This non-
zero as the termination criteria? Thanks.

j <-- 0b10000000
While j is not 0 (any non-zero value i interpreted as true)
Shift j one position to the right.

The single one will then be shifted out after 8 iterations, resulting
in j=0 (i.e. false) and the loop stops.
 
K

Keith Thompson

fl said:
I do not understand the index variable 'j' function below. How deos j
control to end of the for loop?
It cycles 8 times from step tracking. When does j equal 0, it ends the
loop. I do not understand why it ends when j==0.

.............
for (j=0x80; j; j>>=1) {
bit = crc & crchighbit;
crc<<= 1;
if (c & j)
crc|= 1;
if (bit)
crc^= polynom;
}

Whenever an expression (say, "foo") appears in a context that requires a
condition (if, while, do-while, the second clause of a for loop), the
result of the expression is compared to zero, and the condition is true
if the expression is unequal to zero.

For example:

int foo = 0;
if (foo) puts("This will not be printed");
foo = 1;
if (foo) puts("This will be printed");
foo = 42;
if (foo) puts("This will also be printed");

Prior to the C99 standard, C did not have a dedicated boolean type.
Instead, any scalar (even a pointer) could be used as a condition,
with 0 meaning false and non-0 meaning true. C99 added _Bool
(and bool, if you #include <stdbool.h>), but it was merely tacked
onto the existing language; the use of arbitrary scalar values as
conditions is unchanged.

See section 9 of the comp.lang.c FAQ, <http://www.c-faq.com/>.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top