簡體   English   中英

翻轉第 k 個有效位

[英]Flip the k-th significant bit

我想找到一種更好的方法來實現以下目標:

n = 6
k = 1

Flip the 1st significant bit in 6

Variable      Binary representation      Decimal Representation
       n                        110                           6
m(result)                       010                           2

我想實現與這篇wiki 文章中的相同

這是我所做的,但我發現它有點矯枉過正,效率低下:

def toggleKthSignificantBit(self, n, k):
        tmp = list(bin(n)[2:].zfill(3))
        tmp[k-1] = str(int(tmp[k-1]) ^ 1)
        tmp2 = ''.join(tmp)
        print(tmp2)
        return int(tmp2, 2)

IIUC 也許

n ^ 2**(len(bin(n)) - (2 + k))

def toggle_kth_left_to_right(n, k):
    res = n ^ 2**(len(bin(n)) - (2+k))
    return bin(n)[2:], bin(res)[2:]

# toggle_kth_left_to_right(6, 1)
# ('110', '10')

# toggle_kth_left_to_right(6, 2)
# ('110', '100')

# toggle_kth_left_to_right(6, 3)
# ('110', '111')

假設k是位的position

那么這應該可以解決問題

x=n^(2**k)
bin(x)

附錄:如果我們從左邊數位,那么我們可以執行以下操作

x = n^(2**(int(n).bit_length()-k))
bin(x)

經過一番檢查,我找到了解決問題的方法:

但是,我想我找到了一個等效的解決方案:

n ^ (2**(butterfly_rank - k))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM