如何反转此位操作?

时间:2015-07-10 14:55:39

标签: java bit-manipulation

嗯,这可能很容易,但我被困住了。

我正在处理一个16位大小的变量,该变量保存当前小时和分钟的值。

0000 1000 0011 1111

请注意:

前4位无用;

最后6位是小时,其余代表分钟;

无法更改此变量类型或大小;

这就是我成功获得时间和分钟的方式:

hour = ((int) original_value >> 6) & 0x1F;
minute = ( (int) original_value ) & 0x3F;

如何使用不同的小时和分钟来反转此操作以创建新的original_value

1 个答案:

答案 0 :(得分:5)

我可能会遗漏一些东西,但这应该可以解决问题:

new_value = (new_hour << 6) | (new_minutes & 0x3f);

虽然正如其他人所指出的那样,您提取hour的方式可能不对,但您应该AND使用0x3F,而不是0x1F

hour = ((int) original_value >> 6) & 0x3F;