Comparison of a bit vs. setting a bit
You misunderstand the meaning of:

1 &lt;&lt; ADSC


That actually means Bit-shift 1 left by the number of bits specified by the value ADSC.

ADSC in this case is 6:

#define ADSC    6


So if you did:

while(ADSC);


you would actually be doing:

while(6);


Which of course will never end, since 6 is not 0, so is true.

Instead you shift 1 left 6 times, which in binary would be:

00000001
    &lt;&lt; 6
01000000


That, of course, is 64, or 0x40 in hexadecimal.  That is then ANDed with the value of the ADCSRA register to return the value of one single bit within that register.  It's then the result of that AND that you control the while with.  So it ends up as:

while(ADCSRA &amp; 0x40);


Which will either equate to:

while(0x40);


if the 7th bit is set, or if it's not set:

while(0x00);


And since 0x00 is 0 it will equate to false when the bit isn't set and the while will finish.