在java中反转32位整数

问题描述 投票:0回答:1

我正在解决有关在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;

但是输出与测试用例中观察到的不同:

input output

java bit-manipulation bit
1个回答
0
投票

这里有两种方法。在这两种情况下,如果设置了

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
© www.soinside.com 2019 - 2024. All rights reserved.