題目描述:
請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。
示例 1:
輸入:00000000000000000000000000001011
輸出:3
解釋:輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 '1'。
示例 2:
輸入:00000000000000000000000010000000
輸出:1
解釋:輸入的二進位制串 00000000000000000000000010000000 中,共有一位為 '1'。
示例 3:
輸入:11111111111111111111111111111101
輸出:31
解釋:輸入的二進位制串 11111111111111111111111111111101 中,共有 31 位為 '1'。
解法一(使用庫函式):
直接使用庫函式,**如下:
class solution:
def hammingweight(self, n: int) -> int:
return bin(n).count('1')
解法二(向右移位):
用最低位和1取」與「操作可判斷該位是否為1,然後不斷將n右移重複這一過程直到n為0。該方法的**如下,但是無法處理負數問題。
class solution:
def hammingweight(self, n: int) -> int:
cnt = 0
while n > 0:
cnt += n & 1
n = n >> 1
return cnt
解法三(將1 不斷左移):
對輸入的n的二進位制串,首先將其最低位與1進行」與「操作來判斷其最低位是否為1,然後將1不斷左移至二進位制的最高位即可返回。
**如下:
class solution:
def hammingweight(self, n: int) -> int:
cnt = 0
x = 1
for i in range(len(bin(n))-2):
if x & n: cnt += 1
x = x << 1
return cnt
解法三(不斷去掉最後乙個1):
把乙個整數減去1之後再和原來的整數做按位與運算,得到的結果相當於把整數的二進位制表示中最右邊的1變成0。這裡實際輸入數字中有多少個1,就做多少次迴圈。
**如下:
class solution:
def hammingweight(self, n: int) -> int:
cnt = 0
while n:
cnt += 1
n = (n-1) & n
return cnt
操作二進位制寫入二進
操作二進位制 寫入二進位制 1 宣告變數 sqlite3 stmt stat 2 把sql語句解析到stat結構中去 sqlite3 prepare 3 繫結替換 sqlite3 bind blob 4 儲存到資料庫 int result sqlite3 step 5 釋放stat結構 sqlite...
mysql儲存二進位制 mysql 儲存二進位制資料
晚上小研究了下mysql儲存於讀取二進位制資料的功能。關鍵步驟為以下三點 最重要的一點 儲存二進位制資料的表的型別需要是blob型別 按長度不同分為tiny,media,long 插入二進位制資料時需要利用mysql real escape string函式對資料進行轉換 從資料庫中讀取二進位制資料...
mysql 二進位製流 用mysql儲存二進位制資料流
用mysql儲存二進位制資料流,閱讀用mysql儲存二進位制資料流,近日一專案遇到需要在db中儲存2進製資料流型別檔案的問題,發現常用的mysql api都用不了,再研究,方知有一套專門的api來幹這種資料,功能相當強大的說。以下即為範例 按照說明編譯即可用,稍加修改即可儲存2進製檔案 mysql資...