package com.immunize.leetcode.reverseBits;publicclassreverseBits{// 直接计算其反转后的二进制数,注意幂次不要乘错publicstaticintreverseBits(int n){int count =0;for(int i =31; i >=0; i--){
count =(n >>> i &1)<<(31- i)| count;}return count;}// 常规思路:将这32位数,分别与1异或运算,如果不为0,则res中对应32-i位数字为1,依次推算出最终的res数组,最后乘以2的i次幂即可。publicstaticintreverseBits2(int n){int[] re =newint[32];int flag =1;int index =31;// 如果用int可能存在溢出问题long result =0;while(flag !=0){if((flag & n)!=0){
re[index]=1;}
flag = flag <<1;
index--;}for(int i =31; i >=0; i--){
result += re[i]* Math.pow(2, i);}return(int) result;}publicstaticvoidmain(String[] args){
System.out.println(reverseBits(43261596));
System.out.println(reverseBits2(43261596));}}