python - 翻转第 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)
解决方案
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')
推荐阅读
- ios - Ionic 4 和 nodge iPhone 的顶部和底部栏出现奇怪的视觉错误
- profiling - 是否可以在 VisualVM 中分析 apache 风暴拓扑?
- java - 内部 UserDefinedRepository 如何通过在 Spring Boot 中扩展 JpaRepository 来实现方法?
- python - 使用 Python 从 txt 文件中读取并列出唯一单词
- java - 如何使用 LEFT OUTER JOIN 创建 JPA 查询?
- python - 熊猫在未来的滚动意味着纯粹按日期
- android - 按线路布局连接 3 张照片作为路径
- python - Dask dataframe str.contains(regex=True) 不比熊猫快
- png - 将PNG序列导出为lottie json
- c# - 有没有办法在 Windows C# 中区分 macintosh 或 macOS 文件类型?