[英]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.