1. 程式人生 > >位運算——Reverse Bits

位運算——Reverse Bits

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

JAVA程式碼:
方法一:依次遍歷數字的二進位制位,遇到第k位為1,則結果反向(32-1-k)置1

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int result = 0;
        if((n == 0) || (n == 0xffffffff ))
        {
            return n;
        }
        for(int k = 0; k < 32; k++)
        {
            if((n & 0x01) == 1)
            {
              result |= (1
<< (32-k-1)); } n = n>>1; } return result; } }

法二:第二種方法是參考網上的寫法:

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
           int Int_Size = Integer.SIZE;
        if((n == 0) || (n == 0xffffffff
)) { return n; } for(int i = 0; i < Int_Size/2; i++) { int j = Int_Size-1-i; int low = (n >> i) & 1; int high = (n >> j) & 1; int a = 1 << i; int b = 1 << j; if((low ^ high) == 1) { n = n ^ (a|b); } } return n; } }