LeetCode 位運算 位1的個數

2022-08-20 08:57:09 字數 1005 閱讀 5854

編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 『1』 的個數(也被稱為漢明重量)。

示例:

輸入:00000000000000000000000000001011

輸出:3

解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 '1'。

輸入:11111111111111111111111111111101

輸出:31

解釋:輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為 '1'。

題目描述:

因為輸入的是無符號數字,所以如果數字的最高位為 1,右移的話高位也會補 0。所以可以用左移來做,**如下:

class solution 

return cnt;

}};

注意,如果輸入的 n 是有符號數,就不能這樣做了。因為,如果 n 是負數,那麼右移高位會補 1。

我們設定乙個掩碼 mask = 1,每次將 mask 左移一位,移動 32 次,每次移動都和 n 做與操作,如果結果為 1,說明 n 的當前位為 1。**如下:

class solution 

return cnt;

}};

如果 n 是有符號整數,這種方法也能得到正確的答案,而思路 1 會發生錯誤。

將 n 和 n-1 做與運算,會使得 n 的最低位的1變為 0. 例如,n = 3 = 11,n-1 = 2 = 10, n&(n-1) = 11&10 = 10. 所以,假設 n 和 n-1 做與運算 cnt 次後,n 變為 0,則 說明 n 中有 cnt 個 1.**如下:

class solution 

return cnt;

}};

位運算(1) 初識位運算

前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...

LeetCode 位1的個數(位運算)

include using namespace std class solution return result 方法2 o m m為n的二進位制的位數 減1操作將最右邊的符號從0變到1,從1變到0,與操作將會移除最右端的1。如果最初n有x個1,那麼經過x次這樣的迭代運算,n將減到0。inthamm...

LeetCode之位運算

public intadd int a,int b return a 劍指offer 64 求1 2 n 難度 中等 求 1 2 n 要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 題解 用遞迴的方法的 public intsumnu...