顛倒二進位制位
題目描述:顛倒給定的 32 位無符號整數的二進位制位。
提示:
- 請注意,在某些語言(如 Java)中,沒有無符號整數型別。在這種情況下,輸入和輸出都將被指定為有符號整數型別,並且不應影響您的實現,因為無論整數是有符號的還是無符號的,其內部的二進位制表示形式都是相同的。
- 在 Java 中,編譯器使用二進位制補碼記法來表示有符號整數。因此,在上面的 示例 2 中,輸入表示有符號整數 -3,輸出表示有符號整數 -1073741825。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:二進位制運算
將 n 視作一個長為 32 的二進位制串,從低位往高位列舉 n 的每一位,將其倒序新增到翻轉結果 result 中。程式碼實現中,每列舉一位就將 n 右移一位,這樣當前 n 的最低位就是我們要列舉的位元位。當 n 為 0 時即可結束迴圈。需要注意的是,在某些語言(如 Java)中,沒有無符號整數型別,因此對 n 的右移操作應使用邏輯右移。
說明:參考網上題解,原本的解法很笨。
public class LeetCode_190 {
/**
* 二進位制運算
* 將 n 視作一個長為 32 的二進位制串,從低位往高位列舉 n 的每一位,將其倒序新增到翻轉結果 result 中。程式碼實現中,
* 每列舉一位就將 n 右移一位,這樣當前 n 的最低位就是我們要列舉的位元位。當 n 為 0 時即可結束迴圈。需要注意的是,
* 在某些語言(如 Java)中,沒有無符號整數型別,因此對 n 的右移操作應使用邏輯右移。
*
* @param n
* @return
*/
public static int reverseBits(int n) {
int result = 0;
for (int i = 0; i < 32 && n != 0; ++i) {
result |= (n & 1) << (31 - i);
n >>>= 1;
}
return result;
}
public static void main(String[] args) {
int n = 43261596;
// 測試用例,二進位制表示: 00000010100101000001111010011100
System.out.println(Integer.toBinaryString(n));
// 顛倒後二進位制表示: 00111001011110000010100101000000
System.out.println(Integer.toBinaryString(reverseBits(n)));
}
}
【每日寄語】 生命有裂縫,陽光才能照得進來。路上有坎坷,人才變得堅強起來。