我怎样才能反转这个位操作?

How can I invert this bit operation?

好吧,这可能很简单,但我卡住了。

我正在使用一个 16 位大小的 long 变量,它保存当前小时和分钟的值。

0000 1000 0011 1111

请注意:

前4位无用;

后6位为小时,其余为分钟;

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

这就是我成功获取小时和分钟的方法:

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

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

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

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

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

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