Java 如何反转此位操作?

Java 如何反转此位操作?,java,bit-manipulation,Java,Bit Manipulation,这可能很容易,但我被卡住了 我正在使用一个16位大小的长变量,它保存当前小时和分钟的值 0000 1000 0011 1111 请注意: 前4位是无用的 最后6位是小时,剩余的代表分钟 无法更改此变量类型或大小 这就是我成功获取小时和分钟的方法: hour = ((int) original_value >> 6) & 0x1F; minute = ( (int) original_value ) & 0x3F; 如何反转此操作以创建具有不同小时和分钟的新原始\u

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

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

0000 1000 0011 1111
请注意: 前4位是无用的

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

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

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

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

如何反转此操作以创建具有不同小时和分钟的新
原始\u值?

我可能遗漏了一些内容,但这应该可以做到:

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

我可能遗漏了什么,但这应该可以解决问题:

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

如果最后6位是小时,为什么要右移6位来获得小时?为什么要按位和使用
0x1F
?在这两种情况下都应该是
0x3F
,因为每一个都有6位长?我想你的意思是“从左边读……前4位是无用的,“‘下一个’6位是小时,最后6位是分钟”。是@DanAllen。抱歉,这有点让人困惑。@Codebender我之所以使用
0x1F
是因为我想消除在小时和分钟之前可能出现的任何无用信息。如果最后6位是小时,为什么要将6位右移以获得小时?为什么要使用
0x1F
?在这两种情况下都应该是
0x3F
,因为每一个都有6位长?我想你的意思是“从左边读……前4位是无用的,“‘下一个’6位是小时,最后6位是分钟”。是@DanAllen。抱歉,这有点让人困惑。@Codebender我之所以使用
0x1F
进行点评,是因为我想消除任何可能在小时和分钟之前出现的无用信息。我会添加一个验证
0@DanAllen这是一个很好的建议。添加。@SeanBright Why
ing with
0x3f
验证
0@TDG它不会验证小时数是否在0到59之间,它只会停止超过6位的
数据进入结果。在我看来,验证
new_hour
new_minute
的值超出了问题的范围(而且实现起来很琐碎)。我将添加一个验证
0@DanAllen,这是一个很好的建议。添加。@SeanBright Why
ing with
0x3f
验证
0@TDG它不会验证小时数是否在0到59之间,它只会停止超过6位的
数据进入结果。IMO,验证
new_hour
new_minute
的值不在问题的范围内(而且实现起来很简单)。