编码时我发现自己 经常做以下事情:
corner++;
if(corner == 4) corner = 0;
无论如何都要在一行中做到这一点吗?
在此示例中,角应为0,1,2,3,0,1,2,3,0 ......
答案 0 :(得分:31)
答案 1 :(得分:8)
使用余数。这是两条线,但干净。
corner++;
corner %= 4;
答案 2 :(得分:4)
你可以这样做:
corner = ++corner == 4 ? 0 : corner;
如果您的corner
测试未通过,这样您就可以为corner == 4
变量分配其他内容。
答案 3 :(得分:3)
我用:
if (++corner == 4) corner = 0;
答案 4 :(得分:1)
它不是那么明显的,而是更快,因为除法通常比任何按位操作执行得慢。
corner = ++corner & 3;
编辑:令人惊讶的是,我发现了一种更好的骑自行车方式 - 使用轮班,并且运行更快!
corner = ++corner << 30 >>> 30;
这个技巧只适用于任何2的力量。
This benchmark显示所有结果(虽然它是javascript,而不是java)