Java 16位对齐

时间:2013-05-28 15:38:30

标签: java binary alignment bit

我目前正在处理一些表示文件中偏移量的整数值,我需要在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

有人可以确认我是否正确地做到了这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}