我怎样才能反转这个位操作?
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;
好吧,这可能很简单,但我卡住了。
我正在使用一个 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;