什麼是其他一些數字來代替long
(即實際上是由時間戳生成System.currentTimeInMillis())的最後一位(最顯著位)的最高效的(也很安全)的方式?什麼是最高性能(也是安全)的方法來取代最後一位數字?
還是有更好的方式來固定任何附件連接到它的結束,通過利用位操作的?
什麼是其他一些數字來代替long
(即實際上是由時間戳生成System.currentTimeInMillis())的最後一位(最顯著位)的最高效的(也很安全)的方式?什麼是最高性能(也是安全)的方法來取代最後一位數字?
還是有更好的方式來固定任何附件連接到它的結束,通過利用位操作的?
如果這不是一個假設性的問題,即找到它赫克一個快速算法,那麼請忽略這個答案。正確的方法(如上所述)是(某些/ 10)* 10 + newvalue
更快(假設)的方式可能有一些二維數組的調整值。
INT [] [] =調整新INT [16] [10];
其中第一陣列索引代表什麼的當前值與爲0x0F(最後4位) 相與第二陣列索引將要新的號碼是
的值是什麼調整到可變
所以代碼將是
NEWLONG = somelong +調整[somelong &爲0x0F] [what_you_want_the_new_digit];
所以沒有乘法或除法
作爲一個例子,讓我們說的輸入數目是22,並且希望它是26
26是011010所以26 &爲0x0F是底部4位1010,其是10
調整[10] [6] = 4(已預先計算,這是4)
所以你必須22 + 4 = 26
顯然索引10與索引0相同索引11與索引1相同等等
在你的評論中你說二進制數字或十進制數字都可以。由於安德魯發佈了十進制版本,我發佈了二進制版本,用於替換2位數據:
下面的程序檢查了4種可能性,您可以用它替換2位數據並生成輸出:
9999999999999999
9999999999999996
9999999999999997
9999999999999998
9999999999999999
代碼:
public class A {
public static void main(String[] args) {
long aLong = 9999999999999999L;
System.out.println(aLong);
long aLong2 = aLong & ~3 + 0;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 1;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 2;
System.out.println(aLong2);
aLong2 = aLong & ~3 + 3;
System.out.println(aLong2);
}
}
你說的是二進制數字或十進制數字? – 2011-03-06 05:52:18
無論是爲我好。如果更換二進制那麼我想替換爲十進制只是一個數字的情況下,其他2位。 – 2011-03-06 05:58:52