2011-03-06 16 views
1

什麼是其他一些數字來代替long(即實際上是由時間戳生成System.currentTimeInMillis())的最後一位(最顯著位)的最高效的(也很安全)的方式?什麼是最高性能(也是安全)的方法來取代最後一位數字?

還是有更好的方式來固定任何附件連接到它的結束,通過利用位操作的?

+1

你說的是二進制數字或十進制數字? – 2011-03-06 05:52:18

+0

無論是爲我好。如果更換二進制那麼我想替換爲十進制只是一個數字的情況下,其他2位。 – 2011-03-06 05:58:52

回答

0

如果這不是一個假設性的問題,即找到它赫克一個快速算法,那麼請忽略這個答案。正確的方法(如上所述)是(某些/ 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

在你的評論中你說二進制數字或十進制數字都可以。由於安德魯發佈了十進制版本,我發佈了二進制版本,用於替換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); 


} 
} 
相關問題