我目前正在处理一些表示文件中偏移量的整数值,我需要在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
有人可以确认我是否正确地做到了这一点?
答案 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;
}