2013-05-28 72 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; 
}