2014-12-31 94 views
3

我正在試圖製作一個程序,在瓦片地圖中的瓦片頂部創建一個正方形。這些瓷磚是64乘64.我想我需要得到鼠標的座標,將它圍繞到64的最接近的倍數,然後用64除以得到瓷磚座標。有沒有更好的辦法?我應該製作所有的瓷磚按鈕嗎?謝謝!如何將數字四捨五入爲64的最接近倍數

回答

7

你可以做到這一點,如下所示:

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

其工作原理如下:

  1. 您先添加320x20)的數量,使其四捨五入向上/向下。這意味着低於32的所有值都會導致小於64的值和大於32的值大於64
  2. 你掩蓋了最後六位。

一般而言,按位運算比分割和乘法更快。而且,由於你要求兩個權力,這是一個很好的性能破解你可以使用。

但是,如果你有興趣在瓦座標,你不必再乘以64我想。在這種情況下,你可以使用:

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

關於用戶界面一如既往復式的答案是正確的,但如果你要畫一些樣圖就可以了,我想座標比按鈕更好。尤其是如果在後面的過程中,人們將能夠點擊地圖上位於兩個按鈕之間的項目。

2

對於正整數:

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

還是更看中的,因爲64恰好是2的冪:

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

在這裏,你64分,你需要詳談。而'64'的劃分可以通過移動來更高效地完成... –

+0

他爲什麼需要圍繞它?整數運算沒有到最近的單位? – JClassic

+0

@JClassic no。整數算術* trucates *,就像調用'floor()',例如'9/10 - > 0'一樣,它不是舍入到最接近的整數,而是除法結果下面的下一個整數。 – Bohemian