あなたは以下の意味を誤解しています。
1 << ADSC
これは、実際には値ADSC で指定されたビット数だけビットシフト1が残っていることを意味します。
ADSC
in this case is 6:
#define ADSC 6
あなたがした場合:
while(ADSC);
あなたは実際にやっているでしょう:
while(6);
もちろん、6は0ではないので、決して終わらないでしょう、そうです。
代わりに1を左に6回シフトします。バイナリでは次のようになります。
00000001
<< 6
01000000
もちろん、それは64、または0x40で16進数です。次に、ADCSRAレジスタの値と論理積をとって、そのレジスタ内の1ビットの値を返します。それはその結果であり、 while
を使って制御します。だからそれは次のように終わる:
while(ADCSRA & 0x40);
これは、
while(0x40);
7 th ビットが設定されている場合、または設定されていない場合:
while(0x00);
また、0x00は0であるため、ビットが設定されていないときに while
が終了するとfalseとなります。