我正在解决有关在java中反转32位整数的位的问题,下面是相同的代码:
int f=31;
int l=0;
int rev=0;
while(f>l){
if((n&(1<<f))!=0){
rev=rev|(1<<l);
}
if((n&(1<<l))!=0){
rev=rev|(1<<f);
}
f--;
l++;
}
return rev;
但是输出与测试用例中观察到的不同:
这里有两种方法。在这两种情况下,如果设置了
int
的符号高位,请使用 long 以避免得到负数。
32
次以完全反转整数的所有 32
位。2
将当前值向左“移动”一位。%
运算符添加低位。2
for (int d : data) {
long reversed = 0;
for (int i = 0; i < 32; i++) {
reversed = reversed * 2 + d%2;
d/=2;
}
System.out.println(reversed);
}
打印
536870912
1610612736
1342177280
3221225472
如果你喜欢使用位运算,你可以这样做。
1
进行与以获得低位的值。1
位以显示下一位。for (int d : data) {
long reversed = 0;
for (int i = 0; i < 32; i++) {
reversed = (reversed<<1)|(d&1);
d>>=1;
}
System.out.println(reversed);
}
打印
536870912
1610612736
1342177280
3221225472