力扣 190 顛倒二進位制位

2021-10-02 05:40:38 字數 1724 閱讀 3717

鏈結

首先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

bitset<

4>bt(

"11010101");

cout<

//輸出11010101

cout<

<

//輸出1

cout<

test(2

)<

//test檢查下標為2的值,0返回false,1返回true

同時也可以對bt使用操作符

一看到這個題目很直觀的想法,就是先讀一邊輸入,存到bitset裡面,然後再反過來賦值給uint32_t

那麼取乙個數的最後一位bit可以這樣寫

n&

1;

取反乙個數的最後一位(0變為1,1變為0)可以這樣寫

因為這裡n是移位出來的,所以最後一位肯定是0,以下三種方法都可以。但是如果是隨機乙個n要取反的話,只有第一種方式可以

n=n^1;

//如果最後一位是0,那麼異或後變為1,反之同理

n=n|1;

//1100 | 0001 =1101,同樣只適用於最後一位是0的情況n+=

1;//只適用於最後一位是0的情況,如果最後一位是1,會造成進製

^是異或符號,這裡用了乙個性質,假如右邊的值是1,那麼結果必定是左值的取反,假如右邊的值是0,那麼結果仍然是左值,1的bit形式就是0000…0001,剛好可以修改最後一位

結合移位操作符,我們就可以實現遍歷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...