取りあえずなんちゃってベンチマーク。

1: 1188[ms]: 50000000, 50000000: n == 0 || n == 3
2: 1250[ms]: 75000000, 25000000: (n & 1) ^ (n & 2)
3: 1750[ms]: 50000000, 50000000: n * n == 3 * n
4: 1546[ms]: 50000000, 50000000: n * (n - 3) == 0
5: 1500[ms]: 25000000, 75000000: (n & 1) == (n & 2)
6: 1672[ms]: 50000000, 50000000: (!!(n & 1)) == (!!(n & 2))
7: 1719[ms]: 50000000, 50000000: (n & 1) == (n & 2) >> 1
8: 10344[ms]: 50000000, 50000000: !(n % 3)
9: 1500[ms]: 50000000, 50000000: (9 >> n) & 1
10: 1250[ms]: 50000000, 50000000: t[n]
11: 22734[ms]: 50000000, 50000000: (int)(n - (3 / 2.0))

10 の t[n] の t は、static const t[] = {1, 0, 0, 1}; となっている。
n は、ループカウンタの下位2ビット。
ループ回数は 100,000,000 回。
Pentium-II 400MHz + Windows2000 (SP3) + VC6: 最適化 = 実行速度。

やはり、素直な 1 が早い。割り算使う 8 と、浮動小数点演算を行う 11 を除いて、まあ似たり寄ったりだな。