无论初始状态如何,都反转位

时间:2017-02-20 02:08:32

标签: python bit-manipulation bit

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

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

1 个答案:

答案 0 :(得分:2)

问题不是很清楚,但要稍微反转一下将其与1 进行异或(如Foon's comment所示)。

因此,如果你想只反转第4位,你需要与0b1000进行异或,即8。只有8的第4位是1而所有其他位都是0,所以这将保留其他位是的,只有第四位会被反转。

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

你也可以把它变成一个变量,通过向左移位一个位来翻转这个位。因此,如果n是我们想要反转的位,那么:

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