Java中求逆整数
Java中有一种方法可以反转整数reverseBytes()中的位。我想尝试另一种实现,这就是我所拥有的:Java中求逆整数,java,binary,Java,Binary,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 &g
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;
}
公共静态int反转(int num){
int num_rev=0;
对于(int i=0;i>i)和1);
如果((num>>i)&1)!=0){
num_rev=num_rev |(int)Math.pow(2,Integer.SIZE-i);
}
}
返回num_rev;
}
结果num_rev不正确。有人知道如何“重建”价值吗?也许有更好的方法来执行它
谢谢你的建议 您不想使用的原因:
public static int reverseBytes(int i) {
return ((i >>> 24) ) |
((i >> 8) & 0xFF00) |
((i << 8) & 0xFF0000) |
((i << 24));
}
返回通过以下方式获得的值:
反转数据中位的顺序
二元补码表示法
指定的int值
反转位的正常方法是通过位操作,当然不是通过浮点数学例程 e、 g(注意:未经测试) 这实际上是C代码,但由于Java没有要移植到Java的
无符号
类型,所以您需要做的就是删除无符号
限定符,并使用>>
而不是>
来确保您不会得到任何“符号扩展”
它的工作原理是:首先交换每一位,然后交换每一对位,然后交换每一个Nyble,然后交换每一个字节,最后交换顶部和底部的16位字。这实际上是可行的:)您的代码有两个问题:
以上假设这只是为了好玩。但是,如果您真的需要反转位,请不要使用浮点运算。按照其他一些答案的建议进行操作。您能给出一个错误结果的示例吗?您是否尝试过调试这个问题?您是在尝试反转所有32位的顺序,还是只是从一个endian形式交换到other(即交换字节)我正在尝试反转所有32位的顺序。例如:110应该反转为0110000000…(添加所有0)。您是否尝试过反转(int)方法?你能举例说明你期望的结果和它返回的结果吗?我想自己实现它,而不是使用java提供的方法。如果我们从int 110开始,那么我希望得到011000…等等。谢谢你的帮助!非常感谢。出于某种原因,我一直得到相同的结果;我需要测试你的解决方案:)
public static int reverse(int i)
int reverse(int x) {
int y = 0;
for (int i = 0; i < 32; ++i) {
y <<= 1; // make space
y |= (x & 1); // copy LSB of X into Y
x >>>= 1; // shift X right
}
return y;
}
unsigned int reverse(unsigned int x)
{
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return ((x >> 16) | (x << 16));
}