【问题标题】:Inverting bit regardless of initial state无论初始状态如何,反转位
【发布时间】:2017-02-20 02:08:31
【问题描述】:

我希望能够将特定位翻转为 4 位字,而不管其当前状态如何。更具体地说,如果我有 1111,我希望它更改为 0111。

1010 将是 0010。希望在没有 if 语句的情况下执行此操作,最好在 Python 中执行此操作。

【问题讨论】:

  • 请显示您尝试过的内容
  • 提示:假设你要翻转,xor (^) 是你最可能想要的操作

标签: python bit-manipulation bit


【解决方案1】:

问题不是很清楚,但是要反转一点,您可以 用 1 异或(如 Foon's comment 所建议的那样)。

因此,如果您只想反转第 4 位,则需要与0b1000 进行异或运算,即 8。只有 8 的第四位为 1,其他所有位为零,这样其他位将保持原样,只有第四位会被反转。

>>> a = 0b0010
>>> bin(a ^ 8)
'0b1010'

您还可以通过向左移位一位来将其变为将翻转的位的变量。所以如果 n 是我们想要反转的位,那么:

>>> n = 4
>>> a = 0b0010
>>> bin(a ^ (1 << n - 1))
'0b1010'

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2014-08-30
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多