2013-05-28 71 views
3

我目前正在處理一些表示文件內偏移量的整數值,我需要在16位邊界上對齊數字,但是我有點不確定如何執行此操作。Java 16位對齊

例如:

First number: 89023 
16-bit aligned: 89024 

Second number: 180725 
16-bit aligned: 180736 

Third number: 263824 
Already 16-bit aligned, don't need to change it. 

這可能是我的數學沒有我比什麼都重要,但如果任何人都可以就如何在Java中實現這個建議,我將不勝感激。

謝謝!

更新

我想我只是解決了它,它只是一個改裝的16值的物質,然後工作發生了什麼,從16

因此,例如丟失:

180725 % 16 = 5 
16 - 5 = 11 
180725 aligned to 16-bits is: 180736 

有人可以證實我正確地做到了嗎?

+1

是的,你正在四捨五入到下一個16位對齊。 – Farlan

+0

非常感謝! – Tony

回答

2

是的,這將工作。 16位邊界對齊只是確保它將是16的倍數。您在那裏做的是確保值在下一個值16處四捨五入。

// find how far off of alignment you are, 0-15 
offset = num % 16 
// determine how much further you need to move the value to achieve 16 bit alignment 
// only use if offset > 0, otherwise you are already good 
val = 16 - offset 
+0

非常感謝! – Tony

+2

既然16是2的冪,那麼實現這個的更快的方法是計算'(num + 15)&〜16'。 – fge

+1

@fge'(num + 15)&〜15'會更好。 – assylias

2

其他答案/評論中描述了兩種可能性。下面是完整的實現:

public static int getAlignment_modulus() { 
    int offset = num % 16; 
    int result = offset == 0 ? num : num + 16 - offset; 
    return result; 
} 

public static int getAlignment_bitOps() { 
    return (num + 15) & ~15; 
}