3

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

有人可以确认我这样做是正确的吗?

4

2 回答 2

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
于 2013-05-28T15:47:08.560 回答
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;
}
于 2013-05-28T16:40:37.513 回答