反转int中的所有位并返回int

use*_*973 2 java 64-bit bit-manipulation bitwise-operators

当我们反转整数1的所有位时应该返回什么整数?我们如何使用Java代码执行此操作?

不应使用内置函数的java.不应该使用String reverse,转换为字符串等.只允许按位操作.

import java.util.*;
import java.lang.*;
import java.io.*;

class BitReverseInt
{
    public static void main (String[] args) throws java.lang.Exception{
        System.out.println(reverser(1));
    }

    public static int reverser(int given){
          int input = given;
          int temp = 0;
          int output = 0;
          while(input > 0){
            output = output << 1;
            temp = input & 1;
            input = input >> 1;
            output = output | temp;
          }

          return output;
    }
}
Run Code Online (Sandbox Code Playgroud)

dra*_*112 7

位反转可以通过交换相邻的单个位,然后交换相邻的2位字段,然后是4位,等等,如下所示.这五个赋值语句可以按任何顺序执行.

/********************************************************
 * These are the bit masks used in the bit reversal process

   0x55555555 = 01010101010101010101010101010101
   0xAAAAAAAA = 10101010101010101010101010101010
   0x33333333 = 00110011001100110011001100110011
   0xCCCCCCCC = 11001100110011001100110011001100
   0x0F0F0F0F = 00001111000011110000111100001111
   0xF0F0F0F0 = 11110000111100001111000011110000
   0x00FF00FF = 00000000111111110000000011111111
   0xFF00FF00 = 11111111000000001111111100000000
   0x0000FFFF = 00000000000000001111111111111111
   0xFFFF0000 = 11111111111111110000000000000000

 */

    uint x = 23885963;    // 00000001011011000111100010001011

    x = (x & 0x55555555) <<  1 | (x & 0xAAAAAAAA) >>  1; 
    x = (x & 0x33333333) <<  2 | (x & 0xCCCCCCCC) >>  2; 
    x = (x & 0x0F0F0F0F) <<  4 | (x & 0xF0F0F0F0) >>  4; 
    x = (x & 0x00FF00FF) <<  8 | (x & 0xFF00FF00) >>  8; 
    x = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;

    // result x == 3508418176   11010001000111100011011010000000
Run Code Online (Sandbox Code Playgroud)

通过查看每个中间结果,您可以看到发生了什么.

在此输入图像描述

希望这能为您提供所需的信息,让您在脑海中解决问题.John Doe的回答将第4步和第5步合并为一个表达式.这适用于大多数机器.