<<はシフト演算子といい、変数内のビットをnずつずらします。
2進数で表現すると、
00000001 << 5 の結果は 00100000です。
00100000 >> 3 の結果は 00000100です。
&はAND演算子といい、ビットの論理積を求めます。
10101010 & 00001111 の結果は 00001010 です。これは下位4ビットのデータだけを抜き出したりするときに使います。
###動作検証
0step 00000000
1step 00000001
2step 00000011
3step 00000111
rd_id = ((id >> step) << (step + 1)) + mask;
idが01010101のとき
0step 01010101(右シフト) → 10101010(左シフト) → 10101010(mask加算)
1step 00101010(右シフト) → 10101000(左シフト) → 10101001(mask加算)
2step 00010101(右シフト) → 10101000(左シフト) → 10101011(mask加算)
3step 00001010(右シフト) → 10100000(左シフト) → 10100111(mask加算)
wr_id = rd_id + 1 + (id & mask);
1step 10101011(1加算) + 00000000(id & mask) → 10101011
1step 10101010(1加算) + 00000000(id & mask) → 10101010
2step 10101100(1加算) + 00000010(id & mask) → 10101110
3step 10101000(1加算) + 00000010(id & mask) → 10101010
正直何がしたいコードなのかは読み解けないのですが、こんな動作になると思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。