如何将数字舍入到最接近的64的倍数

时间:2014-12-31 23:50:06

标签: java

我正在尝试制作一个程序,在tile图块的tile上创建一个正方形。瓷砖是64乘64.我以为我需要获取鼠标的坐标,将其四舍五入到最接近的64的倍数,并将其除以64以获得瓷砖坐标。有没有更好的办法?我应该制作所有瓷砖按钮吗?谢谢!

2 个答案:

答案 0 :(得分:7)

您可以按照以下方式执行此操作:

int number = 445226;
int roundoff = (number+0x20)&(~0x3f);

它的工作原理如下:

  1. 您首先将320x20)添加到该数字,以便向上/向下舍入。这意味着32以下的所有内容都会产生小于64的值,并且大于32的所有内容都会产生大于64的值。
  2. 你掩盖了最后六位。
  3. 通常,按位运算比除法和乘法更快。而且由于你要求2的强大功能,这是一个很好的性能黑客你可以使用。

    但是如果你对平铺坐标感兴趣,我猜你不必再将其乘以64。在这种情况下,您可以使用:

    int number = 445226;
    int div64 = (number+0x20)>>0x06; //this is divided by 64, not rounded
    

    关于用户界面,因为多个答案都是正确的,但是如果您要在其上绘制某种地图,我猜坐标比按钮更好。特别是如果在此过程的后期,人们将能够点击地图上位于两个按钮之间的项目。

答案 1 :(得分:2)

对于正整数:

int m64 = 64 * ((n + 32) / 64);

或者更加花哨,因为64恰好是2的力量:

int m64 = ((n + 32) >> 6) << 6;