2011-10-17 37 views
1

我有一個Java的速度問題。我正在製作一個國際象棋程序,並且我想檢查一下使用一個int作爲變量來存儲四個int變量是否是一個好主意,其中值範圍從1到4位。速度:四個整數或一個整數與許多操作

問題是我經常需要提取並放入變量的新部分,這樣會花費相當多的按位操作。

代碼:

int fromX = 4, fromY = 5, toX = 6, toY = 7; 
int move = 0 
move |= toY; 
move = move << 4; 
move |= toX; 
move = move << 4; 
move |= fromY; 
move = move << 4; 
move |= fromX; 

doWork(move); 

int fromX = 4, fromY = 5, toX = 6, toY = 7; 
doWork(fromX, fromY, toX, toY); 

doWork()會做很多不同的事情與座標,大多是從「詮釋」提取它們,或者只是使用的變量。

應該使用哪一個?

+0

java中沒有「unsigned」。 – Fildor

+1

我想他的意思是「我忽略符號位的整數」。 – aioobe

+0

你說得對,我的意思是'int'... – Hidde

回答

7

我要檢查,如果是用一個「無符號整型」作爲一個變量來存儲四個「詮釋」變量

沒有一個好主意,這是一個壞主意 ™了一堆原因。

  1. 這將是非常低效的

  2. 很難閱讀

  3. (結果)很難調試

當然,這可能會挽救幾個字節在這裏和那裏,但說實話,我購買我的RAM模塊在千兆字節噸這些日子。

我的建議:

寫你的整個的國際象棋程序。 如果您遇到性能問題,配置文件查看瓶頸位置的程序,並對其執行相關操作。 (我可以向你保證,一旦你達到這一點,你將不會開始打包幾個數字到int)。

+0

我寫了大部分程序,我不想再寫大部分內容。這就是我問的原因。我會在幾天內開始分析,當我完成一個重大錯誤。謝謝! – Hidde

+2

非常好的答案。我同意每個詞。我只想補充一點,問題是過早優化的經典例子。 – AlexR

0

如果你只是想存儲一些標誌,你可以使用BitSet。 如果是數據,我第二個aioobe的答案。

+0

我真的不想製作任何對象,因爲當我在我的國際象棋遊戲可能移動樹中搜索時,我所做的任何事情都會重演大約1000萬次......並且座標不是真正的標誌,它們會改變很多,並且在方法之間來回傳遞。 – Hidde

+0

好的,我明白了。然後,您可能想要考慮創建一個「Context」或「Arguments」 - Object,並在您的10個gazillion調用中分享這個實例。 – Fildor

0

由於艾倫凱said

「讓它工作,使之正確,使其快速,讓它便宜」

一旦你的程序工作,它衡量找出什麼是緩慢的,或者需要太多空間。然後,您可以對您需要優化的內容做出合理的決定。

相關問題