如何反转此位操作?

Mac*_*ado 0 java bit-manipulation

嗯,这可能很容易,但我被卡住了.

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

0000 1000 0011 1111
Run Code Online (Sandbox Code Playgroud)

请注意:

前4位是没用的;

最后6位是小时,剩下的代表分钟;

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

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

hour = ((int) original_value >> 6) & 0x1F;
minute = ( (int) original_value ) & 0x3F;
Run Code Online (Sandbox Code Playgroud)

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

Sea*_*ght 5

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

new_value = (new_hour << 6) | (new_minutes & 0x3f);
Run Code Online (Sandbox Code Playgroud)

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

hour = ((int) original_value >> 6) & 0x3F;
Run Code Online (Sandbox Code Playgroud)