2017-02-20 45 views
-1

无论当前状态如何,我都希望能够将特定位翻转为4位字。更具体地说,如果我有1111,我希望它更改为0111.无论初始状态如何,反转位

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

+2

显示你已经尝试过的情况,请 – eyllanesc

+4

提示:假设你想翻转,XOR(^)是你最有可能想要的操作 – Foon

回答

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'