ANDは論理演算子といって、2進数計算で両方のビットが成立していたらそのビットを1にするというものです 31は2進数で書くと&B00011111となるので、これで計算してやると&B00100000になった場合、10進数でいえば32になった時に&B00011111と比較して、成立していないので、そのビットは0になります つまり、1ずつ数字を足していった場合、10進数で0~31を超えたビットは消えるので変数の中身はその範囲でループするという事です ちょっと難しいですね