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