20

我有一个 integer n,我想k在它的二进制表示中翻转它的第 th 位(从最低)。我该怎么做?

例如,如果我有n=0b01101and k=2,那么结果是0b01001=9

任何语言都可以。谢谢你。

4

5 回答 5

31

要翻转一位或多位,请使用二进制 XOR。在您的情况下,适当的 XOR 掩码向左1 移动位。 k

在 Python 中:

In [58]: 0b01101 ^ (1 << 2)
Out[58]: 9

表达方式:

n ^ (1 << k)

在 C、Java、Python 和其他一些语言中有效(前提是适当定义了变量)。

于 2013-08-15T06:01:25.087 回答
7

将数字 1 左移所需的位数,然后对数字进行异或运算。

JavaScript:

var num = 6, k = 2;
num = num ^ (1 << k);

怎么了:

num = 0b01101 XOR (0b00001 << 2)
num = 0b01101 XOR 0b00100
num = 0b01001
于 2013-08-15T06:13:44.323 回答
3

在 c 中,您只需执行此操作即可切换它:

n ^= 1 << k;

但还有其他方法可以做到这一点:

n |= ( 1 << k);

这将位 k 移动到 1

现在,如果你想翻转位,你可以用一元做一个 if 语句,看看你需要如何翻转它

number = pow(2,k)    
if((number & n) != number)
    //this means that it's a 0 at position k
    n |= ( 1 << k);
else
    //this means that it's a 1 at position k
    n &= ( 0 << k);
于 2013-08-15T06:35:40.927 回答
2

以下是你在 C 中的做法:

n ^ (1 << k)
于 2013-08-15T06:03:00.943 回答
0

(对于谷歌人)这里是你如何在 VB6 中做到这一点而无需移动

'flips a bit to the opposite of its current value
'1 based, left to right
Function FlipBit(ByVal FlipByte As Byte, ByVal bPosition As Byte) As Byte
    FlipBit = FlipByte Xor (2 ^ (8 - bPosition))
End Function

'example
 MyByte = 255
'mybyte is now "11111111"
 MyByte = FlipBit(MyByte,2)
'mybyte is now "10111111"
于 2021-09-25T15:26:04.103 回答