Java中的二进制求逆整数
Java中有一种方法可以反转整数reverseBytes()中的位。我想尝试另一种实现,这就是我所拥有的:
public static int reverse(int num) {
int num_rev = 0;
for (int i = 0; i < Integer.SIZE; i++) {
System.out.print((num >> i) & 1);
if (((num >> i) & 1)!=0) {
num_rev = num_rev | (int)Math.pow(2, Integer.SIZE-i);
}
}
return num_rev;
}
结果num_rev不正确。有人知道如何“重建”价值吗?也许有更好的方法来执行它
谢谢你的建议
# 1 楼答案
您不想使用的原因:
编辑: Integer还具有:
# 2 楼答案
您的代码有两个问题:
以上假设这只是为了好玩。但是,如果确实需要反转位,请不要使用浮点运算。按照其他答案的建议去做
# 3 楼答案
反转位的正常方法是通过位操作,当然不是通过浮点数学例程
例如(注意:未经测试)
因为
x
右移y
左移x
的原始LSB最终成为y
的MSB一种很好的(并且相当广为人知的)方法是:
这实际上是C代码,但由于Java没有
unsigned
类型来移植到Java,所以您需要做的就是删除unsigned
限定符,并使用>>>
而不是>>
来确保您不会得到任何“符号扩展”它的工作原理是:首先每隔一个位,然后每隔一个对,然后每隔一个字节,然后每隔一个字节,最后是顶部和底部的16位字。这实际上是有效的:)