相關算法題目
顛倒給定的 32 位無符號整數的二進制位。
示例 1:
輸入: 00000010100101000001111010011100
輸出: 00111001011110000010100101000000
解釋: 輸入的二進制串 00000010100101000001111010011100 表示無符號整數 43261596,
因此返回 964176192,其二進制表示形式為 00111001011110000010100101000000。
示例 2:
輸入:11111111111111111111111111111101
輸出:10111111111111111111111111111111
解釋:輸入的二進制串 11111111111111111111111111111101 表示無符號整數 4294967293,
因此返回 3221225471 其二進制表示形式為 10101111110010110010011101101001。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reverse-bits
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
解答與解析
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int index=0;//記錄循環的次數
int res=0;//用來存放輸出結果
while(index<32){
//數字有32位,因此循環32次
res<<=1;//將res的二進制碼向左移動1位,空出最低位用來存放目標數據
res|=(n&1);//(n&1)將源數據n執行與操作,這樣可以得到n的最低位是0還是1。
//然后將最低位和res做|=運算,即做`與`運算之后將值賦給res,這樣完成了一次將最低位數字放入最高位的操作
n>>=1;//將源數據的二進制碼右移一位,以待后續操作
index++;//執行循環之后遞增標識符以控制循環
}
return res;//將最終結果返回
}
}