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具有不同小时和分钟的新操作?
我可能会遗漏一些东西,但这应该可以解决问题:
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)