鏈結
首先uint32_t的**是typedef unsigned int uint32_t;
,是無符號整型,四個byte
然後c++裡面還有乙個資料型別叫bitset,在標頭檔案bitset 中,每個元素僅佔乙個bit的空間-詳細用法
建構函式
bitset<
4>bt;
//長度32,預設為0
bitset<
32>bt(
"10101");
//長度32,最右邊的五位是10101,其它預設為0
bitset<
8>bt(
12);//長度為8,值為0000 1100
同時也可以對bt使用操作符bitset<
4>bt(
"11010101");
cout<
//輸出11010101
cout<
<
//輸出1
cout<
test(2
)<
//test檢查下標為2的值,0返回false,1返回true
一看到這個題目很直觀的想法,就是先讀一邊輸入,存到bitset裡面,然後再反過來賦值給uint32_t
那麼取乙個數的最後一位bit可以這樣寫
取反乙個數的最後一位(0變為1,1變為0)可以這樣寫n&
1;
因為這裡n是移位出來的,所以最後一位肯定是0,以下三種方法都可以。但是如果是隨機乙個n要取反的話,只有第一種方式可以
^是異或符號,這裡用了乙個性質,假如右邊的值是1,那麼結果必定是左值的取反,假如右邊的值是0,那麼結果仍然是左值,1的bit形式就是0000…0001,剛好可以修改最後一位n=n^1;
//如果最後一位是0,那麼異或後變為1,反之同理
n=n|1;
//1100 | 0001 =1101,同樣只適用於最後一位是0的情況n+=
1;//只適用於最後一位是0的情況,如果最後一位是1,會造成進製
結合移位操作符,我們就可以實現遍歷bit,或者按照bitset給bit賦值兩種方法了
執行結果class
solution
//依次按照bt中的值給ans賦值,注意移位是31-i,也就是最高位是31而不是32
for(i=
0;isize()
;i++
)return ans;}}
;
更簡潔的解法
直接按位取出最後一位,然後再賦值給ans。注意要先左移一位ans,這樣迴圈最高位會丟掉一開始的0,然後結果就是剛好逆序了
第二種方法class
solution
return ans;}}
;
class
solution
return ret;}}
;
刷題 力扣 190 顛倒二進位制位
題目鏈結 題目描述 顛倒給定的 32 位無符號整數的二進位制位。高階 示例 1 輸入 00000010100101000001111010011100 輸出 00111001011110000010100101000000 解釋 輸入的二進位制串 00000010100101000001111010...
190 顛倒二進位制位
題目描述 顛倒給定的 32 位無符號整數的二進位制位。示例 1 輸入 00000010100101000001111010011100 輸出 00111001011110000010100101000000 解釋 輸入的二進位制串 00000010100101000001111010011100 表...
leetcode 190 顛倒二進位制位
顛倒給定的 32 位無符號整數的二進位制位。示例 輸入 43261596輸出 964176192解釋 43261596 的二進位制表示形式為00000010100101000001111010011100,返回 964176192,其二進位制表示形式為001110010111100000101001...