位運算 1 找出略大略小數

2021-09-13 12:13:07 字數 702 閱讀 3564

題目描述:給定乙個正整數,找出與其二進位制表示1的個數相同、略大和略小的2個數

# 獲取略大的數

def getnext(num):

# n是為了統計出p和c1、c0

n = num

c1 = 0

c0 = 0

while n&1 == 0 and n != 0:

c0 += 1

n >>= 1

while (n&1) == 1:

c1 += 1

n >>= 1

p = c0+c1

# 類似於11111……0000這種輸入和全0的輸入

if p == 31 or p == 0:

return 'error'

num |= 1<>= 1

# 判斷全0或者全1的情況

if n == 0:

return 'error'

while n&1 == 0 and n != 0:

c0 += 1

n >>= 1

p = c0+c1

# 將p位及以後的置0

num &= (~0<<(p+1))

# 在p後面放c1+1個1

mask = (1<<(c1+1))-1

num |= mask << (c0-1)

return num

位運算(1) 初識位運算

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

LeetCode 位運算 位1的個數

編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 示例 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 00000000000000000000000000001011 中,共有三位為 1 輸...

基礎演算法 位運算 找出奇特的數

leetcode 裡面有兩道關於找出落單的數的題 single number 和 single number ii single number 這道題是讓找出乙個陣列裡唯一乙個落單的數,其餘的數都出現了2次 這道題首要想到的是異或,因為異或的性質中有a a 0 0 a a,這樣就能找出那個只出現的1...