首页 > 解决方案 > 翻转第 k 个有效位

问题描述

我想找到一种更好的方法来实现以下目标:

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)

标签: pythonbit-manipulationbitwise-operatorsbit-shift

解决方案


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')

推荐阅读